2017-04-27 105 views
2

我想将包含日期的json字符串转换为使用jackson的jodaTime的DateTime。不幸的是我得到这个错误NoSuchFieldError“ADJUST_DATES_TO_CONTEXT_TIME_ZONE”尝试解析json

java.lang.NoSuchFieldError: ADJUST_DATES_TO_CONTEXT_TIME_ZONE 

JSON对象看起来是这样的:

{ 
"add_time": "2017-04-26 14:26:58", 
} 

我已经包含乔达时间和杰克逊在我的pom.xml如下:

 <dependency> 
      <groupId>joda-time</groupId> 
      <artifactId>joda-time</artifactId> 
      <version>2.9.9</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.datatype</groupId> 
      <artifactId>jackson-datatype-joda</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 

杰克逊版是2.8.8。 我已经建立了我的对象映射是这样的:

ObjectMapper mapper = new ObjectMapper(); 
    mapper.registerModule(new JodaModule()); 

有谁知道这个问题可能是什么?我现在坚持了几个小时。我也尝试禁用DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE但它没有帮助。

回答

0

您需要指定自定义日期时间格式,因为JSON中的格式不是杰克逊所期望的格式。您可以通过字段或设置方法的@JsonFormat注释轻松完成此操作(无需禁用ADJUST_DATES_TO_CONTEXT_TIME_ZONE)。例如。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 
DateTime addTime; 

您示例中的日期将被解析为2017-04-26T14:26:58.000Z。顺便提一下,这是Jackson预期的默认格式。

如果您不想添加注释,但可能会更复杂,您可以查看自定义反序列化器。

+0

你的方法没有帮助。我仍然得到例外。 – Martin

+0

Jackson需要日期时间格式才能解析此日期。你报告的异常说'ADJUST_DATES_TO_CONTEXT_TIME_ZONE'在你正在使用的Jackson版本中不可用。但是你不需要在我的答案中使用这种方法来禁用或启用它。所以你可以删除这个配置,你不会得到这个特殊的异常。如果你需要为其他原因进行配置,那么你必须确认你正在使用Jackson版本> = 2.2 –

+0

我不怀疑你在说什么。我试了一下。我添加了@JsonFormat并删除了禁用ADJUST_DATES_TO_CONTEXT_TIME_ZONE的代码。你的建议可能防止了我在异常解决时得到的错误,但现在我仍然得到这个异常。 – Martin