java - Jackson 可以解析不是 ISO-8601 的日期时间值吗?
问题描述
我试图让杰克逊解析我无法更改的特定 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 与 Joda DateTime 合作了很长时间,从您的错误消息来看,您似乎正在使用 Java.DateTime 来添加对 Java dateTime 的支持,您需要添加一些额外的依赖项 “jackson-datatype-jdk8”,请参见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());
推荐阅读
- javascript - jQuery:获取html元素的正常JS格式
- asp.net-mvc - CLRThreadPoolQueue 中的大部分请求
- mysql - #2006 - MySQL 服务器已消失/仅在某些数据库中
- nestjs - NestJS 处理服务异常
- react-native - 刷新路线 - 仅在显示屏幕时渲染屏幕(已修复)
- java - 如何根据变量延迟 Spring Bean 初始化
- python-3.x - 在 Python 中使用索引和标签迭代列表
- python - 如何在保持顺序的同时重塑数组?
- c++ - 带指针的结构的间接原子交换
- html - div 上的边框与 Chrome 中表头上的边框不对齐