温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何解决使用Jackson反序列化遇到的问题

发布时间:2021-08-10 11:23:37 来源:亿速云 阅读:450 作者:小新 栏目:开发技术

这篇文章主要为大家展示了“如何解决使用Jackson反序列化遇到的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决使用Jackson反序列化遇到的问题”这篇文章吧。

Jackson反序列化遇到的问题

最近在项目中需要使用Jackson把前台转来的字符转为对象,转换过程中发生了错误,报错如下

com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of java.util.Date from String
value '2018-09-14 15:12:08': not a valid representation (error: Failed to parse Date value '2018-09-14 15:12:08':
Can not parse date "2018-09-14 15:12:08": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ",
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))

原因是需要转换成的目标对象有Date类型的属性,前台传来的是yyyy-MM-dd HH:mm:ss类型

而Jackson只支持以下四种

yyyy-MM-dd'T'HH:mm:ss.SSSZ 
yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 
EEE, dd MMM yyyy HH:mm:ss zzz 
yyyy-MM-dd

在网上查了许多方法都比较麻烦,我太懒……

发现用两个注解就可以轻松解决

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createTime;

JackSon反序列化时忽略对象中不存在的json字段

如果json字段比较多,而我们对象只需要部分字段,这时反序列化时会报错,可以在new ObjectMapper后加上

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

就可以在反序列化时忽略json中多余的字段了。

jackson反序列化失败异常总结

存在冲突的访问器方法,Conflicting setter definitions for property “myproperty”

例如:

class TypeA extends TypeB implements InfC {}
class TypeB {
 String myproperty;
 String getMyproperty(){return myproperty};
 void setMyproperty(String value){myproperty = value};
}
interface InfC {
 String getMyproperty();
 void setMyproperty(String value); 
}

以上是“如何解决使用Jackson反序列化遇到的问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI