将新媒体类型添加到Mapping2JacksonHttpMessageConverter

时间:2017-04-20 08:36:20

标签: spring jackson converter mime-types

我正在尝试为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;
}   

1 个答案:

答案 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>