diff options
Diffstat (limited to 'src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java')
-rw-r--r-- | src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java b/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java index 79c9a96f0..66e682e5f 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java +++ b/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo.As; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.cfg.SerializerFactoryConfig; +import com.fasterxml.jackson.databind.deser.impl.UnsupportedTypeDeserializer; import com.fasterxml.jackson.databind.introspect.*; import com.fasterxml.jackson.databind.jsontype.NamedType; import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder; @@ -16,6 +17,7 @@ import com.fasterxml.jackson.databind.jsontype.TypeSerializer; import com.fasterxml.jackson.databind.ser.impl.FilteredBeanPropertyWriter; import com.fasterxml.jackson.databind.ser.impl.ObjectIdWriter; import com.fasterxml.jackson.databind.ser.impl.PropertyBasedObjectIdGenerator; +import com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer; import com.fasterxml.jackson.databind.ser.std.MapSerializer; import com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer; import com.fasterxml.jackson.databind.type.ReferenceType; @@ -376,6 +378,12 @@ public class BeanSerializerFactory return prov.getUnknownTypeSerializer(Object.class); // throw new IllegalArgumentException("Cannot create bean serializer for Object.class"); } + + JsonSerializer<?> ser = _findUnsupportedTypeSerializer(prov, type, beanDesc); + if (ser != null) { + return (JsonSerializer<Object>) ser; + } + final SerializationConfig config = prov.getConfig(); BeanSerializerBuilder builder = constructBeanSerializerBuilder(beanDesc); builder.setConfig(config); @@ -447,9 +455,8 @@ public class BeanSerializerFactory } } - JsonSerializer<Object> ser = null; try { - ser = (JsonSerializer<Object>) builder.build(); + ser = builder.build(); } catch (RuntimeException e) { return prov.reportBadTypeDefinition(beanDesc, "Failed to construct BeanSerializer for %s: (%s) %s", beanDesc.getType(), e.getClass().getName(), e.getMessage()); @@ -467,7 +474,7 @@ public class BeanSerializerFactory } } } - return ser; + return (JsonSerializer<Object>) ser; } protected ObjectIdWriter constructObjectIdHandler(SerializerProvider prov, @@ -814,4 +821,19 @@ public class BeanSerializerFactory return pb.buildWriter(prov, propDef, type, annotatedSerializer, typeSer, contentTypeSer, accessor, staticTyping); } + + protected JsonSerializer<?> _findUnsupportedTypeSerializer(SerializerProvider ctxt, + JavaType type, BeanDescription beanDesc) + throws JsonMappingException + { + if (ClassUtil.isJava8TimeClass(type.getRawClass())) { + // 05-May-2020, tatu: Should we check for possible Shape override to "POJO"? + // (to let users force 'serialize-as-POJO'? + return new UnsupportedTypeSerializer(type, +"Java 8 date/time type "+ClassUtil.getTypeDescription(type) ++" not supported by default: please register module `jackson-datatype-jsr310` to add handling"); + } + return null; + + } } |