ObjectMapper采坑记及源码分析

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也是有坑的,再一个还会增加研发时间,得不偿失。

ObjectMapper采坑记及源码分析

上一篇:uniapp UI 设计参考网站


下一篇:vue axios