【发布时间】:2017-11-07 07:46:30
【问题描述】:
我想启用以下杰克逊映射器功能:
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;
}
spring-boot-1.5.3.RELEASE
【问题讨论】:
-
您在哪里创建 ObjectMapper 实例,在 java 类文件中还是在 spring 配置中?
-
它是由
spring-boot或spring-mvc自动创建的,因此在初始化时应该使用配置属性。 -
我认为您需要更改标签以添加 spring-boot
-
您正在尝试的是数据绑定,它对杰克逊没有任何作用。您正在传递 URL 参数,而 Jackson 序列化程序/映射器仅对响应主体而不是参数有效。
-
我可以在
1.5.3.RELEASE版本上进行复制。
标签: java json spring-mvc spring-boot jackson