我正在尝试向 jackson 转换器添加一个新类型,它是一个自定义类型,但它实际上只是 json,标准对象映射器应该可以将其转换为 java 对象。
我正在尝试以下操作:
@Bean
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter()
{
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
MediaType fhir = new MediaType("application", "json+fhir");
List<MediaType> jacksonTypes = new ArrayList<>(converter.getSupportedMediaTypes());
jacksonTypes.add(fhir);
converter.setSupportedMediaTypes(jacksonTypes);
return converter;
}
当我在启动时调试应用程序并查看支持的类型列表时,我可以在其中看到 fhir 媒体类型,但仍然遇到相同的错误:
Could not extract response: no suitable HttpMessageConverter found for response type [class MyClass] and content type [application/json+fhir]
我正在寻求一些帮助以使消息转换器能够使用此自定义类型。
谢谢
** 编辑 - 我使用下面的 Stanislavs 答案修复了这个问题:
@Bean
RestTemplate restTemplate()
{
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
messageConverters.add(mappingJackson2HttpMessageConverter());
return restTemplate;
}
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter()
{
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
converter.setObjectMapper(objectMapper);
MediaType fhir = new MediaType("application", "json+fhir");
List<MediaType> jacksonTypes = new ArrayList<>(converter.getSupportedMediaTypes());
jacksonTypes.add(fhir);
converter.setSupportedMediaTypes(jacksonTypes);
return converter;
}
最佳答案
猜测您的转换器未正确注册。我认为 Jackson 单独添加了转换器,并且您的 bean 被忽略了。
只需创建扩展 MappingJackson2HttpMessageConverter
的转换器类
然后像这样注册
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">
<mvc:message-converters register-defaults="true">
<bean class="com.example.MyMappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
关于spring - 向 MappingJacksonHttpMessageConverter 添加新媒体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43514319/