如何覆盖类属性中的 application.yml?

Posted

技术标签:

【中文标题】如何覆盖类属性中的 application.yml?【英文标题】:How can I overwrite a application.yml in a class attribute? 【发布时间】:2021-12-30 11:36:25 【问题描述】:

我的属性 yml 文件中有这个属性:

jackson:
    default-property-inclusion: non_null
    serialization:
        write-empty-json-arrays: false
    serialization-inclusion: NON_EMPTY

它的作用是禁止 JSON 空数组。但是对于类中的特定属性,我希望能够将其返回为空。有没有办法或财产我可以用来做这个? 谢谢!

【问题讨论】:

【参考方案1】:

唯一的方法是创建另一个ObjectMapper,然后使用它来序列化该特定类。

@Configuration
class JacksonConfiguration 

    @Bean
    fun mainObjectMapper() = jacksonObjectMapper().apply 
        setSerializationInclusion(JsonInclude.Include.NON_NULL)
        setSerializationInclusion(JsonInclude.Include.NON_EMPTY)
    

    @Bean
    fun otherObjectMapper() = jacksonObjectMapper().apply 
        setSerializationInclusion(JsonInclude.Include.NON_NULL)
    

但是,对于这么简单的事情,这似乎有点过头了。


另一个可能最适合您的选项是使用@JsonInclude 注释。您可以按如下方式使用它:

@JsonInclude(JsonInclude.Include.ALWAYS)
List<String> propertyToSerializeEvenIfEmptyOrNull;

【讨论】:

嘿,乔奥!谢谢你的时间!我试过使用@JsonInclude(JsonInclude.Include.ALWAYS),但似乎属性文件会覆盖它。那么,唯一的选择是通过 objectMapper? 那我就答应了。 还有一个问题:我应该如何调用 objectMapper 到类? 这取决于您如何序列化该类的对象。

以上是关于如何覆盖类属性中的 application.yml?的主要内容,如果未能解决你的问题,请参考以下文章

在 Autowired 服务类中测试 REST API 时,如何使用测试 application.yml 覆盖主 application.yml?

如何在春季启动测试中覆盖 application-test.yml?

无法从 Java Spring Boot 项目中的 application.yml 文件中读取用户定义类的列表

覆盖多个弹簧活动配置文件的属性值

从位置“类路径资源 [application-dev.yml]”导入的属性“spring.profiles.active”无效

如何附加到覆盖的 YAML 文件(Spring)中的数组?