diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java index 729aa8be8..204ed5e19 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java @@ -20,6 +20,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.lang.reflect.Member; import java.lang.reflect.TypeVariable; import java.net.URL; import java.net.URLClassLoader; @@ -33,6 +34,7 @@ import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.function.Function; import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -118,6 +120,7 @@ public class Settings { public List javadocXmlFiles = null; public List extensions = new ArrayList<>(); public List> includePropertyAnnotations = new ArrayList<>(); + public Function includePropertyFunctionImpl = null; public List> excludePropertyAnnotations = new ArrayList<>(); public List> optionalAnnotations = new ArrayList<>(); public List> requiredAnnotations = new ArrayList<>(); diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java index d48b09a81..76ab65f89 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java @@ -35,6 +35,7 @@ import com.fasterxml.jackson.databind.deser.CreatorProperty; import com.fasterxml.jackson.databind.deser.DefaultDeserializationContext; import com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap; +import com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer; import com.fasterxml.jackson.databind.introspect.AnnotatedClass; import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair; import com.fasterxml.jackson.databind.jsontype.NamedType; @@ -45,6 +46,7 @@ import com.fasterxml.jackson.databind.ser.BeanSerializer; import com.fasterxml.jackson.databind.ser.BeanSerializerFactory; import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer; import com.fasterxml.jackson.databind.type.TypeFactory; import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationIntrospector; import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector; @@ -275,6 +277,10 @@ private BeanModel parseBean(SourceType> sourceClass, List class beanProperty, settings.jackson2Configuration != null && settings.jackson2Configuration.disableObjectIdentityFeature); + if( settings.includePropertyFunctionImpl != null && !settings.includePropertyFunctionImpl.apply( member ) ) { + continue; + } + if (!isAnnotatedPropertyIncluded(beanProperty::getAnnotation, sourceClass.type.getName() + "." + beanProperty.getName())) { continue; } @@ -548,7 +554,10 @@ private BeanSerializerHelper createBeanSerializerHelper(JavaType javaType) { try { final DefaultSerializerProvider.Impl serializerProvider = new DefaultSerializerProvider.Impl() .createInstance(objectMapper.getSerializationConfig(), objectMapper.getSerializerFactory()); - final JsonSerializer jsonSerializer = BeanSerializerFactory.instance.createSerializer(serializerProvider, javaType); + JsonSerializer jsonSerializer = BeanSerializerFactory.instance.createSerializer(serializerProvider, javaType); + if (jsonSerializer != null && jsonSerializer instanceof StdDelegatingSerializer) { + jsonSerializer = ((StdDelegatingSerializer ) jsonSerializer).getDelegatee(); + } if (jsonSerializer != null && jsonSerializer instanceof BeanSerializer) { return new BeanSerializerHelper((BeanSerializer) jsonSerializer); } else { @@ -564,7 +573,10 @@ private BeanDeserializerHelper createBeanDeserializerHelper(JavaType javaType) { final DeserializationContext deserializationContext = new DefaultDeserializationContext.Impl(objectMapper.getDeserializationContext().getFactory()) .createInstance(objectMapper.getDeserializationConfig(), null, null); final BeanDescription beanDescription = deserializationContext.getConfig().introspect(javaType); - final JsonDeserializer jsonDeserializer = BeanDeserializerFactory.instance.createBeanDeserializer(deserializationContext, javaType, beanDescription); + JsonDeserializer jsonDeserializer = BeanDeserializerFactory.instance.createBeanDeserializer(deserializationContext, javaType, beanDescription); + if (jsonDeserializer != null && jsonDeserializer instanceof StdDelegatingDeserializer) { + jsonDeserializer = ((StdDelegatingDeserializer ) jsonDeserializer).getDelegatee(); + } if (jsonDeserializer != null && jsonDeserializer instanceof BeanDeserializer) { return new BeanDeserializerHelper((BeanDeserializer) jsonDeserializer); } else {