将新媒体类型添加到 Mapping2JacksonHttpMessageConverter

Add new media type to Mapping2JacksonHttpMessageConverter

我正在尝试向 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 就被忽略了。

the example

只需创建您的转换器 class 扩展 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>