ObjectMapper采坑记及源码分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ObjectMapper采坑记及源码分析相关的知识,希望对你有一定的参考价值。

技术图片

问题描述

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

问题跟踪

跟踪1

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

跟踪2

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

源码分析

技术图片
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采坑记及源码分析的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB多表关联分组查询指定行数数据实践遇坑记及解析

MongoDB多表关联分组查询指定行数数据实践遇坑记及解析

zabbix 之安装采坑记

Redis适配采坑记

AWS Redshift 采坑记

RocketMQ采坑记