Java Jackson能否解析非';ISO-8601?

Java Jackson能否解析非';ISO-8601?,java,datetime,jackson,Java,Datetime,Jackson,我试图让Jackson解析我无法更改的特定API提供给我的日期时间值 所以我给它一个自定义模式: 公共类问题{ 公共静态void main(字符串[]args)引发异常{ ObjectMapper mapper=新的ObjectMapper(); registerModule(新的JavaTimeModule()); 字符串json=“{\”发布于\“:\”2019年10月14日星期一13:00:00+0900\”; Model Model=mapper.readValue(json,Model

我试图让Jackson解析我无法更改的特定API提供给我的日期时间值

所以我给它一个自定义模式:

公共类问题{
公共静态void main(字符串[]args)引发异常{
ObjectMapper mapper=新的ObjectMapper();
registerModule(新的JavaTimeModule());
字符串json=“{\”发布于\“:\”2019年10月14日星期一13:00:00+0900\”;
Model Model=mapper.readValue(json,Model.class);
System.out.println(型号发布于);
}
公共静态类模型{
@JsonFormat(shape=JsonFormat.shape.STRING,pattern=“E,d MMM yyyy HH:mm:ss XX”)
公共分区日期时间张贴于(网址);;
}
}
我得到一个例外:

线程“main”java.time.format.DateTimeParseException中的异常:无法在索引0处分析文本“Mon,2019年10月14日13:00:00+0900” 看起来它在索引0处失败了,但我不明白为什么,因为对于星期几格式模式“E”,似乎“Mon”应该是正确的值

迄今为止:

  • 设置反序列化功能。将日期调整到上下文时区

    mapper.configure(反序列化功能。将日期调整到上下文时区,false)
    
    结果:相同的异常

  • 添加
    Jdk8Module

    ObjectMapper mapper=new ObjectMapper()
    .registerModule(新的Jdk8Module())
    .registerModule(新的JavaTimeModule());
    
    结果:相同的异常


Jackson在Joda DateTime上工作了很长时间,从您的错误消息来看,您似乎正在使用Java.DateTime添加对Java DateTime的支持。您需要添加一些额外的依赖项“Jackson-datatype-jdk8”请参阅

然后添加新模块

// Up to Jackson 2.9: (but not with 3.0)
ObjectMapper mapper = new ObjectMapper()
   .registerModule(new Jdk8Module())
   .registerModule(new JavaTimeModule()); 

所以上面我已经在使用JavaTimeModule了。但是我使用的是jackson-datatype-jsr310而不是jackson-datatype-jdk8。如果取而代之的是jackson-datatype-jdk8,那么我就再也找不到JavaTimeModule了,所以我假设两者都需要。现在我找到了这两个类,但仍然得到相同的错误。但是什么是ParameterNamesModule?我从哪里得到它?您可以忽略新的ParameterNamesModule(),JDK8Module和JavaTimeModule是主要的参数。您还可以尝试调整:ObjectMapper mapper=new ObjectMapper();配置(反序列化功能。将日期调整到上下文时区,false);在这些之后,以及在尝试将日期调整到上下文时区之后,出现相同的异常
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE, false)
// Up to Jackson 2.9: (but not with 3.0)
ObjectMapper mapper = new ObjectMapper()
   .registerModule(new Jdk8Module())
   .registerModule(new JavaTimeModule());