[英]Can Jackson parse date-time values which aren't ISO-8601?
我试图让 Jackson 解析由我无法更改的特定 API 给我的日期时间值。
所以我给它一个自定义模式:
public class Problem {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
String json = "{\"posted_at\":\"Mon, 14 Oct 2019 13:00:00 +0900\"}";
Model model = mapper.readValue(json, Model.class);
System.out.println(model.posted_at);
}
public static class Model {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "E, d MMM yyyy HH:mm:ss XX")
public ZonedDateTime posted_at;
}
}
我得到这个例外:
Exception in thread "main" java.time.format.DateTimeParseException: Text 'Mon, 14 Oct 2019 13:00:00 +0900' could not be parsed at index 0
它似乎在索引 0 处失败,但我不明白为什么,因为对于星期几格式模式“E”,似乎“Mon”应该是正确的值。
到目前为止尝试过:
设置DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE
:
mapper.configure(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE, false)
结果:同样的例外。
添加Jdk8Module
:
ObjectMapper mapper = new ObjectMapper().registerModule(new Jdk8Module()).registerModule(new JavaTimeModule());
结果:同样的例外。
Jackson has worked for a long time with Joda DateTime and from your error message it seems you are using Java.DateTime to add support for Java dateTime you need to add some extra dependencies "jackson-datatype-jdk8" see https://github. com/FasterXML/jackson-modules-java8
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
然后你设置ADJUST_DATES_TO_CONTEXT_TIME_ZONE
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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.