如何自定义JsonSerialize以及Deserialize实现数据类型转换


如何自定义JsonSerialize以及Deserialize实现数据类型转换,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先我们定义一个java POJO实体类,其中关键的成员变量时birthDate,我们没有采用Date数据类型,而是采用了Java8 新的日期类型LocalDateTime ,使用LocalDateTime 的好处我就不多说了,有很多的文章解释说明。我们把精力放回到Jackson的JSON格式序列化与反序列化内容上来。下面的代码,我们首先定义了一个PlayerStar4类的对象player,然后使用writeValueAsString方法将player对象序列化为JSON字符串jsonString然后使用readValue方法将JSON字符串jsonString ,反序列化为PlayerStar4类的对象但是上面的代码报错了,从下图中可以看出将player对象序列化为JSON字符串jsonString 的过程被正常执行了,但是LocalDateTime序列化之后的结果,是图中”黄框中的黄框“内容。将JSON字符串反序列化的过程报错了,因为Jackson默认情况下,根本不认识图中”黄框中的黄框“内容这种LocalDateTime序列化之后的JSON字符串数据结构。无法把它反序列化为java对象。怎么办?我们需要自定义序列化及反序列化类型转换器,有两种方法继承StdConverter类,自定义实现String与LocalDateTime相互转换继承JsonSerializer和JsonDeserializer类,自定义实现String与LocalDateTime相 香港云主机互转换继承StdConverter类,将LocalDateTime序列化为String数据类型继承StdConverter类,将String数据类型反序列化为LocalDateTime自定义的转换器完成之后,我们就可以在对应的成员变量上,使用@JsonSerialize指定序列化转换器,@JsonDeserialize指定反序列化转换器。然后调用第一小节中的测试用例,就不会出现异常了。控制台打印输出结果如下,第一行是序列化结果JSON格式字符串,第二行是Java 对象的toString()方法的打印结果。继承JsonSerializer类,将LocalDateTime序列化为String数据类型继承JsonDeserializer类,将String数据类型反序列化为LocalDateTime对于相对小白的读者,上面的自定义序列化及反序列化转换过程你都没懂,对于LocalDateTime的异常你也不要慌,Jackson已经给出了解决方案。需要特别和大家强调的是LocalDateTimeSerializer和LocalDateTimeDeserializer其实并不需要我们自己去定义,因为Jackson已经帮我们定义好了。 之所以我还做了自定义的实现的介绍,是因为要为大家讲解这个自定义序列化和反序列化类型转换的实现过程,以后你再遇到其他的特殊的数据类型转换,或者LocalDateTime类型的特殊日期格式等,都可以自己来定义JsonSerialize和JsonDeserialize来实现数据类型的转换。下面的这两个类就是Jackson已经帮我们定义好的LocalDateTimeSerializer和LocalDateTimeDeserializer。使用方法是在对应的成员变量上,使用@JsonSerialize指定序列化转换器,@JsonDeserialize指定反序列化转换器。执行之后的序列化和反序列化结果,和方法一、方法二自定义的实现效果是一样的。看完上述内容,你们掌握如何自定义JsonSerialize以及Deserialize实现数据类型转换的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注开发云行业资讯频道,感谢各位的阅读!

相关推荐: fastJson中怎么反序列化处理泛型

fastJson中怎么反序列化处理泛型,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在我们日常的编码工作中,常常会制定或者遇到这样的json结构对于该接口的提供者,最外层的resu…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 09/18 10:46
下一篇 09/18 10:47

相关推荐