默认情况下,输入类对象中包含 Optional 类型字段,Json 序列化和反序列化都会有一些问题:
Optional 类型序列化 Json
1 | public class Book { |
Json 序列化后,subTitle
字段并没有包含值, 而是一个嵌套的对象。
原因是 isPresent()
是一个 Optional 类的公共 getter 属性,在序列化时被直接序列化了。
Optional 类型反序列化 Json
对 Json 字符串反序列化成包含 Optional 字段的类会抛出 JsonMappingException
异常:
1 | String bookJson = "{ \"title\": \"Oliver Twist\", \"subTitle\": \"foo\" }"; |
解决方法
引入 jackson-datatype-jdk8
包依赖:
1 | <dependency> |
在初始化 ObjectMapper 时,注册 Jdk8Module
模块:
1 | ObjectMapper mapper = new ObjectMapper(); |