如何使用Spring application.properties自定义Jackson ObjectMapper?

时间:2017-06-06 10:26:35

标签: java json spring-mvc spring-boot jackson

我想启用以下jackson mapper功能: MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES

根据https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html

可以在application.properties中配置如下: spring.jackson.mapper.accept_case_insensitive_properties=true

可是:

@RestController
public class MyServlet {
    @RequestMapping("/test")
    public void test(@Valid TestReq req) {

    }
}

public class TestReq {
    @NotBlank
    private String name;
}

用法:

localhost:8080/test?name=test //works
localhost:8080/test?Name=test //fails with 'name may not be blank'

因此,不考虑不区分大小写的属性。但为什么呢?

顺便说一句:即使使用Jackson2ObjectMapperBuilderCustomizer显式也不起作用:

@Bean
public Jackson2ObjectMapperBuilderCustomizer initJackson() {
    Jackson2ObjectMapperBuilderCustomizer c = new Jackson2ObjectMapperBuilderCustomizer() {
        @Override
        public void customize(Jackson2ObjectMapperBuilder builder) {
            builder.featuresToEnable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES);
        }
    };

    return c;
}

弹簧引导1.5.3.RELEASE

2 个答案:

答案 0 :(得分:2)

简单回答:这是不可能的。

Jackson2ObjectMapperBuilderCustomizer仅影响JSON POST请求。它对get查询绑定没有影响。

答案 1 :(得分:0)

根据spring doc,您可以对其进行自定义。

我通过这样设置我的application.yml(春季2.0)来解决此问题:

 spring:
  jackson:
    mapper:
      ACCEPT_CASE_INSENSITIVE_PROPERTIES: true

您是否尝试将设置accept_case_insensitive_properties更改为大写?

还可以通过以下设置将输出保持为大写:

  jackson:
    mapper:
      ACCEPT_CASE_INSENSITIVE_PROPERTIES: true
    property-naming-strategy: com.fasterxml.jackson.databind.PropertyNamingStrategy.PascalCaseStrategy

请注意,PascalCaseStrategy现在已被弃用,但仍可以使用。