java – 如何将包含LocalDate字段的json转换为可反序列化的格式?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何将包含LocalDate字段的json转换为可反序列化的格式?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1484字,纯文字阅读大概需要3分钟。
内容图文
![java – 如何将包含LocalDate字段的json转换为可反序列化的格式?](/upload/InfoBanner/zyjiaocheng/774/188dd061631244d1818cc6692c0ef21f.jpg)
我有一个存储在String中的对象.对象的一个??字段是LocalDate.
"from": {
"year": 1000,
"month": "JANUARY",
"era": "CE",
"dayOfMonth": 1,
"dayOfWeek": "WEDNESDAY",
"dayOfYear": 1,
"leapYear": false,
"monthValue": 1,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
}
我该如何将这个json转换为可用于反序列化的格式?
以下代码
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
ObjectMapper om = new ObjectMapper();
om.registerModule(new JavaTimeModule());
MyCustomObject obj = om.readValue(json, MyCustomObject.class); //error
导致此异常:
com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (START_OBJECT), expected VALUE_STRING: Expected array or string.
这是我用作MyCustomObject< LocalDate>的MyCustomObject类.
public class MyCustomObject<T> {
private T from;
private T to;
public MyCustomObject() {
}
public T getFrom() {
return this.from;
}
public void setFrom(T from) {
this.from = from;
}
public T getTo() {
return this.to;
}
public void setTo(T to) {
this.to = to;
}
}
解决方法:
LocalDate未正确存储在JSON中.
解决问题的正确方法是确保生成JSON的ObjectMapper已注册JavaTimeModule或Jdk8Module.这可确保将LocalDate正确序列化为[年,月,日]的JSON数组.
蛮力方法是遵循@Roy在另一个答案中概述的解决方案,并手动将每个相关字段转换为LocalDate.有点像:
LocalDate date = LocalDate.now()
.with(ChronoField.YEAR, year)
.with(ChronoField.MONTH_OF_YEAR, Month.valueOf(month).getValue())
.with(ChronoField.DAY_OF_MONTH, dayOfMonth);
这显然是容易出错的,而不是如何使用类.
内容总结
以上是互联网集市为您收集整理的java – 如何将包含LocalDate字段的json转换为可反序列化的格式?全部内容,希望文章能够帮你解决java – 如何将包含LocalDate字段的json转换为可反序列化的格式?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。