【springboot】@EnableWebMvc注解有什么用?导致@RestController不返回json default-property-inclusion: non_null不起作用?

最近开发中遇到个比较奇怪的现象,一直以来我们都是用RestController返回json,
default-property-inclusion: non_null把null值过滤,但是突然间有个项目,
这样的配置和注解就失效了.

同样的代码在之前项目可以,新项目不行,就要考虑架构问题,是不是引入了什么,把配置给覆盖了。

原因排查:

全局查找代码 发现有个类继承了 WebMvcConfigurationSupport ,而在spring boot官方文档中有提示,在这里插入图片描述
我们可以写个@EnableWebMvc 点进去看看,里面import了一个DelegatingWebMvcConfiguration
在这里插入图片描述
在这里插入图片描述
所以我们可以得出结论:@EnableWebMvc 其实就是开启WebMvcConfigurationSupport 。

而我们可以在WebMvcAutoConfiguration这个springmvc自动配置类中看到,@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
也就是说 当不存在 WebMvcConfigurationSupport 的时候 ,WebMvcAutoConfiguration自动配置才会生效
在这里插入图片描述

结论:

spring文档提示不能写@EnableWebMvc注解 但它并不是最终原因,因为@EnableWebMvc最终开启了WebMvcConfigurationSupport,也就是说WebMvcConfigurationSupport才是问题根本所在。
我们写了一个类 继承了WebMvcConfigurationSupport 导致WebMvcAutoConfiguration失效
(同理 有@EnableWebMvc也会导致WebMvcAutoConfiguration失效)
从而导致了RestController不返回json, 以及 default-property-inclusion配置也失效 (当然 还可能也其它的诸多问题)

那么问题来了,为什么有的项目我们能见到@EnableWebMvc呢?
在早期的ssm项目中,配置springmvc有两种方式,一种是直接实现WebMvcConfigurationSupport,
另一种就是实现WebMvcConfigurer 并加上@EnableWebMvc注解了
(前文提过@EnableWebMvc作用就是开启WebMvcConfigurationSupport,博主见到比较多的是第二种方式)

在springboot中,因为有了WebMvcAutoConfiguration自动配置,可以不需要@EnableWebMvc,
如果我们或许需要更多的自定义功能 那就可以加上@EnableWebMvc 将默认配置进行覆盖


@RestController不返回json 解决方法

所以 如果项目中,继承WebMvcConfigurationSupport的类 没什么很大作用 或者可以其它方式替代,我们可以不再使用这个类,如果这个类是必不可少的,或者不确定用途,我们只好通过注解的形式,完成返回json及过滤空值的功能:

转json解决方案:

在controller层 RequestMapping或GetMapping等注解中加上格式,强制转成json:
@GetMapping(headers = “Accept=application/json” ,produces =“application/json;charset=UTF-8” )

过滤null解决方案:
在实体类中加上注解 @JsonInclude(JsonInclude.Include.NON_NULL)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟秋与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值