如何解决DateTime和Jackson问题?

时间:2016-02-26 08:09:01

标签: java datetime jackson jodatime

根据约会时间和杰克逊,我得到以下错误。我无法想出办法。有什么建议吗?

Caused by: com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class org.joda.time.chrono.ISOChronology]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
 at [Source: ["[Ljava.lang.Object;",[1,3,["org.joda.time.DateTime",{"era":1,"dayOfYear":57,"dayOfWeek":5,"dayOfMonth":26,"year":2016,"yearOfCentury":16,"centuryOfEra":20,"secondOfDay":19539,"minuteOfDay":325,"hourOfDay":5,"minuteOfHour":25,"secondOfMinute":39,"millisOfSecond":538,"yearOfEra":2016,"weekyear":2016,"monthOfYear":2,"millisOfDay":19539538,"weekOfWeekyear":8,"chronology":["org.joda.time.chrono.ISOChronology",{"zone":["org.joda.time.UTCDateTimeZone",{"fixed":true,"id":"UTC"}]}],"millis":1456464339538,"zone":["org.joda.time.UTCDateTimeZone",{"fixed":true,"id":"UTC"}],"afterNow":false,"beforeNow":true,"equalNow":false}]]]; line: 1, column: 412] (through reference chain: Object[][2]->org.joda.time.DateTime["chronology"])
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1080)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:142)
    at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:110)
    at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromObject(AsArrayTypeDeserializer.java:58)
    at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:131)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:521)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:95)
    at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:248)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
    at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:110)
    at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromAny(AsArrayTypeDeserializer.java:68)
    at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserializeWithType(UntypedObjectDeserializer.java:500)
    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:158)
    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:17)
    at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:110)
    at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromArray(AsArrayTypeDeserializer.java:50)
    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserializeWithType(ObjectArrayDeserializer.java:189)
    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserializeWithType(ObjectArrayDeserializer.java:17)
    at com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize(TypeWrappedDeserializer.java:42)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3562)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2578)
    at com.amazonaws.services.simpleworkflow.flow.JsonDataConverter.fromData(JsonDataConverter.java:96)

1 个答案:

答案 0 :(得分:1)

默认情况下,jackson没有JodaTime

的正确映射

查看jackson-datatype-joda项目here

将此jar添加到类路径后,您必须通过以下方式注册模块:

// less performant
ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();

// more performant
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new new JodaModule());