Java SpringBoot WebMvcConfigurationSupport没有';当我们进入bean时,不要使用configureMessageConverters
在Java SpringBoot WebMvcConfigurationSupport没有';当我们进入bean时,不要使用configureMessageConverters,java,spring-boot,spring-mvc,converters,Java,Spring Boot,Spring Mvc,Converters,在WebMvcConfigurationSupport子类中,我们重写方法configureMessageConverters 当我们得到一个像豆子一样的转换器时 @Bean public HttpMessageConverter mappingJackson2HttpMessageConverter(){ MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpM
WebMvcConfigurationSupport
子类中,我们重写方法configureMessageConverters
当我们得到一个像豆子一样的转换器时
@Bean
public HttpMessageConverter mappingJackson2HttpMessageConverter(){
MappingJackson2HttpMessageConverter jacksonConverter =
new MappingJackson2HttpMessageConverter(new EventServiceObjectMapper());
return jacksonConverter;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new Jaxb2RootElementHttpMessageConverter());
converters.add(mappingJackson2HttpMessageConverter());
}
正常吗?我错过了什么
依赖项::
SpringWebMVC4.3.22.0版本
弹簧罩1.5.19.释放
我找到了一个解决办法。扩展WebMVCConfigureAdapter,并实现extendMessageConverters,清除转换器并仅设置所需的转换器
@Bean
public HttpMessageConverter mappingJackson2HttpMessageConverter(){
MappingJackson2HttpMessageConverter jacksonConverter =
new MappingJackson2HttpMessageConverter(new EventServiceObjectMapper());
return jacksonConverter;
}
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.clear();
converters.add(new Jaxb2RootElementHttpMessageConverter());
converters.add(mappingJackson2HttpMessageConverter());
}
@Bean
公共HttpMessageConverter映射Jackson2HttpMessageConverter(){
映射Jackson2HttpMessageConverter jacksonConverter=
新的MappingJackson2HttpMessageConverter(新的EventServiceObjectMapper());
返回插孔转换器;
}
@凌驾
public void extendMessageConverters(列表我一直在与WebMVC和RestAPI斗争。一旦@EnableWebMvc
,它将覆盖spring.jackson.
config
我的解决方案是,获取当前映射Jackson2HttpMessageConverter
,然后定制我想要的
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
private ObjectMapper mapper;
@Autowired // spring.jackson.* ObjectMapper's config
public WebConfig(ObjectMapper mapper) {
this.mapper = mapper;
}
@Override
public void extendMessageConverters (List<HttpMessageConverter<?>> converters) {
converters.stream()
.filter(x -> x instanceof MappingJackson2HttpMessageConverter)
.forEach(x -> ((MappingJackson2HttpMessageConverter) x).setObjectMapper(mapper));
}
}
@EnableWebMvc
@配置
公共类WebConfig实现WebMVCConfiguer{
私有对象映射器映射器;
@自动连线//spring.jackson.*ObjectMapper的配置
公共网络配置(ObjectMapper映射器){
this.mapper=mapper;
}
@凌驾
公共无效扩展消息转换器(列表请添加错误StackTrace…不要扩展WebMvcConfigurationSupport
,而是实现WebMvcConfigurer
。它们没有错误。我们使用第一个代码,它使用默认的转换器。第二个代码使用我想要的转换器。因此,如果我想使用bean声明转换器,可以通过RestTemplate获得,我无法在方法中使用它来声明控制器的转换器。我扩展了WebMVCConfigureAdapter(相同,然后实现WebMVCConfiguer,无需实现所有方法)现在更强大了。需要一组默认转换器x2和我声明的两个,总共16个。我在更改为WebMvcConfigurationSupport之前所做的初始错误。以及这两个代码的结果。
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
private ObjectMapper mapper;
@Autowired // spring.jackson.* ObjectMapper's config
public WebConfig(ObjectMapper mapper) {
this.mapper = mapper;
}
@Override
public void extendMessageConverters (List<HttpMessageConverter<?>> converters) {
converters.stream()
.filter(x -> x instanceof MappingJackson2HttpMessageConverter)
.forEach(x -> ((MappingJackson2HttpMessageConverter) x).setObjectMapper(mapper));
}
}