问题
后盾接管 Json
参数时有以下要求:
- 指定工夫格局
- 疏忽不辨认的字段
- 疏忽不辨认的枚举
个别是配置 ObjectMapper 即可失效
配置 ObjectMapper
@Bean@Primarypublic ObjectMapper objectMapper() { return new ObjectMapper() .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) .enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL) .setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));}
如上配置没有失效
配置 Jackson2ObjectMapperBuilderCustomizer
@Bean@Primarypublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> builder .featuresToDisable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) .featuresToEnable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL) .simpleDateFormat("yyyy-MM-dd HH:mm:ss");}
也不失效
解决方案
解决方案援用自 Jackson2ObjectMapperBuilderCustomizer不失效解决
不失效的起因个别是 MappingJackson2HttpMessageConverter
对象在程序启动时创立了多个,咱们只有将多余的去掉,并从新增加 MappingJackson2HttpMessageConverter
的 bean 就能够了
问题本源
根底包中配置了 MappingJackson2HttpMessageConverter
,导致应用服务工程中配置的 ObjectMapper
有效
@Configurationpublic class WebMvcConfig implements WebMvcConfigurer { @Autowired private RequestApiInterceptor requestApiInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(requestApiInterceptor).addPathPatterns("/**"); } @Bean public RequestApiInterceptor restfulApiInterceptor() { return new RequestApiInterceptor(); } /** * 解决controller返回string类型数据谬误 */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(0, new MappingJackson2HttpMessageConverter()); }}
要害代码
在应用服务工程中按如下配置性能失效
@Configurationpublic class ConvertConfiguration implements WebMvcConfigurer { public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { ObjectMapper objectMapper = new ObjectMapper() .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) .enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL) .setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); return new MappingJackson2HttpMessageConverter(objectMapper); } @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { converters.removeIf(MappingJackson2HttpMessageConverter.class::isInstance); converters.add(0, mappingJackson2HttpMessageConverter()); }}