我想启用以下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
答案 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现在已被弃用,但仍可以使用。