【问题标题】:How to resolve DateTime and Jackson issue? [duplicate]如何解决 DateTime 和 Jackson 问题? [复制]
【发布时间】:2016-06-09 08:44:03
【问题描述】:

根据日期时间和杰克逊,我收到以下错误。我无法找到出路。有什么建议吗?

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)

【问题讨论】:

标签: java datetime jackson jodatime


【解决方案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 JodaModule());

【讨论】:

  • 我认为 OP 正在与 JodaTime 合作
  • @StefanHaberl 感谢您指出这一点,我已经编辑了我的答案
  • 这似乎不起作用。 :( 我仍然遇到同样的运行时错误。还有其他建议吗?
  • @AmrutaShah 你能告诉我们你导致异常的代码吗?你使用任何框架吗?
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 2020-06-12
  • 2016-12-31
  • 2021-05-09
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多