我正在尝试为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;
}
答案 0 :(得分:2)
猜猜您的转换器未正确注册。我认为Jackson会单独添加转换器,而你的bean只会被忽略。
请参阅the example
只需创建扩展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>