spring.jackson.default-property-inclusion 被忽略

Posted

技术标签:

【中文标题】spring.jackson.default-property-inclusion 被忽略【英文标题】:spring.jackson.default-property-inclusion ignored 【发布时间】:2020-10-30 07:41:55 【问题描述】:

在我的 Spring Boot/Kotlin 项目中,我试图让 JSON 转换器忽略我的休息控制器响应中的空值。

我尝试在 application.yml 中设置以下内容:

  spring:
    jackson:
      default-property-inclusion: non_null

我还尝试提供Jackson2ObjectMapperBuilder@ObjectMapper 类型的@Bean 配置为.serializationInclusion(JsonInclude.Include.NON_NULL),但它仍在序列化所有空属性。

使用 Spring Boot 2.3.0、Kotlin 1.3.72、AdoptOpenJDK 13

【问题讨论】:

【参考方案1】:

好吧,我通过从头开始创建一个新项目并从当前项目添加部分直到出现异常行为,从而发现了问题。

原来问题出在用于添加 CORS 映射的类中:

@EnableWebMVC
@Configuration
class WebConfiguration : WebMvcConfigurer 
    override fun addCorsMappings(registry: CorsRegistry) 
        registry.addMapping("/**")
                .allowedOrigins("*")
    

我想我在示例中添加了@EnableWebMVC,但该类与@RESTController 类不在类层次结构的同一部分,所以看起来这就是对象映射器配置不存在的原因应用。我对 Spring/Boot 的内部布线了解得不够多,无法告诉你原因。

一旦我删除了@EnableWebMVC 并允许 Spring Boot 通过 Autoconfiguration 将其添加到应用程序类中,它就按预期工作了......

【讨论】:

谢谢你!即将做同样的事情(从头开始),但及时找到了答案!对我来说,是 @EnableWebFlux 注释做到了,但结果是一样的。但是你当时是如何管理 CORS 的呢? 伙计,我已经阅读了大量关于如何设置 default-property-inclusion 的教程,但由于该注释,它们都没有工作。我将尝试找到我配置 CORS 的教程,并在此处留下评论,以防止开发人员日后头疼。巨大的坦克给你,有我的支持! @TerjeAndersen 我刚刚删除了 @EnableWebMVC 注释,一切正常。注册 CORS 映射的配置类仍然有效。注释为 web mvc 启用了一堆默认设置,但为了使用 @RestControllers 等,这不是必需的。 谢谢!很高兴知道为什么它有效

以上是关于spring.jackson.default-property-inclusion 被忽略的主要内容,如果未能解决你的问题,请参考以下文章