Skip to content

Cannot serialize org.joda.time.Days #160

@bestbugwriter

Description

@bestbugwriter

I found jackson-datatype-joda is also has a serializer com.fasterxml.jackson.datatype.joda.deser.PeriodDeserializer,and Days does implements the ReadablePeriod interface.
but I don't known why it is not work.

https://stackoverflow.com/questions/79535991/joda-date-time-type-org-joda-time-days-not-supported-by-default?noredirect=1#comment140269178_79535991

I used joda 2.10.14 time and jackson 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, but has PeriodDeserializer. So, how should I resolve this issue?

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions