javajacksonjodatimejackson-databind

Joda date/time type `org.joda.time.Days` not supported by default:


I used joda 2.10.14 time and jackson2 2.18.3,

jackson-core-2.18.3.jar
jackson-databind-2.18.3.jar
jackson-datatype-joda-2.18.3.jar
joda-time-2.10.14.jar

I have register JodaModule, but it also throw Exception, my code is

public static void main(String[] args) throws JsonProcessingException {
    DateTime dateTime = new DateTime();
    Days days = Days.days(1);
    Map<String, Object> map = new HashMap<>();
    map.put("dateTime", dateTime);
    map.put("days", days);
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JodaModule());
    String json = objectMapper.writeValueAsString(map);
    System.out.println(json);
}

the exception

Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Joda date/time type `org.joda.time.Days` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-joda" to enable handling (through reference chain: java.util.HashMap["days"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1340)
at com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer.serialize(UnsupportedTypeSerializer.java:35)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:808)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:764)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:502)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:341)
at com.fasterxml.jackson.databind.ObjectMapper._writeValueAndClose(ObjectMapper.java:4819)
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:4060)
at azkaban.utils.JSONUtils.main(JSONUtils.java:96)

I checked JodaModule code, found that it is not add Days deserializer. So, how should I resolve this issue?

enter image description here


Solution

  • The code maintainers have helped fix this problem.

    https://github.com/FasterXML/jackson-datatype-joda/issues/162

    https://github.com/FasterXML/jackson-datatype-joda/issues/160