目录
前言
我们公司的框架对接口返回的java对象转换为字符串的序列化策略上进行了定制。如:当String类型属性值为null时,会转换为空字符串返回、当List类型为nul时返回长度为0的空数组、当Boolean类型为null时返回false、对Bigdecimal类型的属性值,默认保留2位小数点。
关于最后一点,当业务需要指定其他精度时,可以在成员属性上添加@JSONField注解来指定保留小数位数。
/**
* 保留小数点后6位
*/
@ApiModelProperty("经度")
@JSONField(format = "#0.000000")
private BigDecimal longitude;
但是经实验后发现,该注解在微服务A下生效,在微服务B下无效,即 始终返回2位小数。因此尝试定位原因并修复。
自定义序列化策略是如何实现的
注:以下代码、图片均为个人工程的模拟重现,去除了一些无关代码以便于理解。
根据框架配置可以发现在WebMvcConfiguration.java中重写了 configureMessageConverters(List<HttpMessageConverter<?>> converters) 方法,并引入了 CustomBigDecimalCodec.java 对BigDecimal属性的序列化策略进行定制。
CustomBigDecimalCodec.java 是一个自定义编解码器,在参数传入、返回时进行 “字符串和BigDecimal属性”之间的转换策略。
它继承了fastjson(version: 1.2.70)的BigDecimalCodec.java并重写了write(JSONSerializer serializer, Object object