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只支持以下四种
1 2 3 4 | 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 |
在网上查了许多方法都比较麻烦,我太懒……
发现用两个注解就可以轻松解决
1 2 3 | @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后加上
1 | objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false ); |
就可以在反序列化时忽略json中多余的字段了。
jackson反序列化失败异常总结
存在冲突的访问器方法,Conflicting setter definitions for property “myproperty”
例如:
1 2 3 4 5 6 7 8 9 10 | 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); } |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持自学编程网。
- 本文固定链接: https://zxbcw.cn/post/219224/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)