Jackson 在我的 spring boot 应用程序中忽略了 spring.jackson.properties

2022-09-03 05:03:45

Jackson忽略了spring.jackson.property-nameing-strategy=SNAKE_CASE。我正在使用弹簧靴版本1.4.2.发布。在我的 application.properties 文件中,我添加了

spring.jackson.property-nameing-strategy=SNAKE_CASE

但杰克逊并不尊重这个属性,我的REST回应仍然是骆驼壳。有趣的是,这个注释工作得很好

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)

有了这个注释,我得到了snake_case回应。但我不想注释每个响应类,这有点烦人。

编辑

我也尝试使用完全限定的类名,

spring.jackson.property-nameing-strategy=com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy

这也不起作用


答案 1

我在应用程序的其中一个类(ExceptionHandler)中进行了注释(面部 - 手掌!@EnableWebMvc

但是,根据这个问题

如果您有@EnableWebMvc注释,这将禁用Spring MVC的自动配置,包括配置其消息转换器以自定义Jackson的序列化。

当您使用@EnableWebMvc时,这是预期的行为,因为通过这样做,您告诉Spring Boot您想要控制Spring MVC的配置。这包括配置其 HTTP 消息转换器,以符合您需求的方式(取消)序列化 JSON。

如果要覆盖 Jackson 配置,可以使用 spring.jackson.* 属性,或者,如果需要更多控制,可以声明自己的 Jackson2ObjectMapperBuilder bean。

删除注释后,此属性将按预期工作。@EnableWebMvc


答案 2

根据文档

/**
 * One of the constants on Jackson's PropertyNamingStrategy
 * (CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES). Can also be a fully-qualified class
 * name of a PropertyNamingStrategy subclass.
 */
private String propertyNamingStrategy;

您可以在“application.properties”中配置它,如下所示:

spring.jackson.property-naming-strategy=com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy

推荐