运维开发网

ObjectMapper采坑记及源码分析

运维开发网 https://www.qedev.com 2020-11-15 08:23 出处:51CTO 作者:browser123
问题描述当两个环境共享一个私服时,一个环境的先发布,拉去最新代码;另外一个环境没有发布,没有发布的环境,代码里面没有包含传过来的属性,就会报错。问题跟踪跟踪1上面这个代码,就是一个环境发布拉去最新的代码,另外一个环境没有发布,导致没有相关属性。跟踪2把上面objMap的注释去掉,这种情况会执行成功,因为设置了属性不存在,不报异常的情况。源码分析1、根据英文说明,默认是true,只要属性不存在就会抛

ObjectMapper采坑记及源码分析

问题描述

当两个环境共享一个私服时,一个环境的先发布,拉去最新代码;另外一个环境没有发布,没有发布的环境,代码里面没有包含传过来的属性,就会报错。

问题跟踪

跟踪1

ObjectMapper采坑记及源码分析

上面这个代码,就是一个环境发布拉去最新的代码,另外一个环境没有发布,导致没有相关属性。

跟踪2

ObjectMapper采坑记及源码分析

把上面objMap的注释去掉,这种情况会执行成功,因为设置了属性不存在,不报异常的情况。

源码分析

ObjectMapper采坑记及源码分析

1、根据英文说明,默认是true,只要属性不存在就会抛异常,平常开发的时候一般设置为false。

2、在进行设计编码的时候,要考虑到这个类的配置及可能的异常

ObjectMapper objectMapper = new ObjectMapper();

//这个是序列化对象所有的属性

objectMapper.setSerializationInclusion(Include.ALWAYS);

//这个是没有属性时的设置

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

//空对象的时候,不要抛异常

objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

//时间的需要自己去转化,默认是时间轴

objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"))

总结

1、平常在进行开发设计的时候,尤其是公共的类,有几个模块用到,这个时候增加属性和删除属性,要充分的测试,对调用的api也要仔细查看。

2、平时对调用的api,虽然有坑,但是肯定有解决的办法,不要一碰到坑就换种api,说不定换的api也是有坑的,再一个还会增加研发时间,得不偿失。

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号