springboot 配置jackson的问题

康贝勒 2021-01-29 10:17:01
我的项目里有两种情况,我接手前的代码使用的是全局配置defaultPropertyInclusion = not null方式,当json字段对应的值为空时过滤,这样返回的字段参差不齐,目前这些接口已经提供给第三方使用。

我接手后写的接口都用了不同的VO,想实现不论是否有值,都要返回给前端,以保证返回的字段固定,前端获取的时候不需要判断字段是否为null。但前提是不影响旧接口:旧接口使用not null方式返回,新接口对应的VO全部返回,请问该如何配置?

简单的说就是,自定义指定的接口使用不同的序列化策略,有什么办法吗?

ext:旧接口由于字段参差不齐,所以第三方在建实体的时候可能少生成某些字段,如果统一全返回的话,势必会造成第三方调用时报错。因此现在的策略只能是,旧接口保持不变,新接口全部返回的方式来做,请问如何实现呢?
...全文
288 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
康贝勒 2021-01-29
  • 打赏
  • 举报
回复
引用 3 楼 qybao 的回复:
[quote=引用 2 楼 康贝勒 的回复:][quote=引用 1 楼 qybao 的回复:]vo加个setDefault方法设定各个字段的初始值
新接口在生成vo对象时调用setDefault把默认的初始值都设好,然后再按现状的逻辑set业务数据,这样,新接口因为vo没有set业务数据的字段都有个初始值不会是null,你的所有字段就都能返回了。

可以是可以,不过以后每一个VO都要加,我可以给你一个建议,直接在VO类上加注解@JSONInclude,我看看还有没有更好的方法吧,主要是怕把项目写乱了不好维护[/quote]
这不是考虑到你还要保留旧的接口吗?在VO类上加注解@JSONInclude不影响旧接口吗?[/quote]

嗯,新写的VO类加上@JsonInclude,旧接口不用动,这样不会影响旧接口,不论是setDefault还是JsonInclude,都感觉不太好维护
qybao 2021-01-29
  • 打赏
  • 举报
回复
引用 2 楼 康贝勒 的回复:
[quote=引用 1 楼 qybao 的回复:]vo加个setDefault方法设定各个字段的初始值 新接口在生成vo对象时调用setDefault把默认的初始值都设好,然后再按现状的逻辑set业务数据,这样,新接口因为vo没有set业务数据的字段都有个初始值不会是null,你的所有字段就都能返回了。
可以是可以,不过以后每一个VO都要加,我可以给你一个建议,直接在VO类上加注解@JSONInclude,我看看还有没有更好的方法吧,主要是怕把项目写乱了不好维护[/quote] 这不是考虑到你还要保留旧的接口吗?在VO类上加注解@JSONInclude不影响旧接口吗?
康贝勒 2021-01-29
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
vo加个setDefault方法设定各个字段的初始值
新接口在生成vo对象时调用setDefault把默认的初始值都设好,然后再按现状的逻辑set业务数据,这样,新接口因为vo没有set业务数据的字段都有个初始值不会是null,你的所有字段就都能返回了。

可以是可以,不过以后每一个VO都要加,我可以给你一个建议,直接在VO类上加注解@JSONInclude,我看看还有没有更好的方法吧,主要是怕把项目写乱了不好维护
qybao 2021-01-29
  • 打赏
  • 举报
回复
vo加个setDefault方法设定各个字段的初始值 新接口在生成vo对象时调用setDefault把默认的初始值都设好,然后再按现状的逻辑set业务数据,这样,新接口因为vo没有set业务数据的字段都有个初始值不会是null,你的所有字段就都能返回了。
编号灬9527 2021-01-29
  • 打赏
  • 举报
回复
看了下大多数的回复,感觉都没找到点上; 首先要知道将对象转json的入口:RequestResponseBodyMethodProcessor.handleReturnValue; 最终回到了httpmessageconverter(springboot默认估计是MappingJackson2HttpMessageConverter这个类)转换器上面,在使用一个ObjectMapper的情况下,要么空值返回null,要么空值压根就不写入返回结果,这默认是只支持一种情形的; 所以现在呼之欲出了,自己去继承MappingJackson2HttpMessageConverter,最简单的方式就是额外增加一个ObjectMapper,保证和你默认配置的ObjectMapper对空值的处理相反,在选择objectmapper时,通过controller方法增加注解得方式,有注解用新加的,没注解用自动装配objectmapper, 对旧的接口无感知,需要额外处理的接口自己加个注解即可
KeepSayingNo 2021-01-29
  • 打赏
  • 举报
回复
感觉用注解方式比较好

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧