aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java
diff options
context:
space:
mode:
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.java28
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;
+
+ }
}