spring - 向 MappingJacksonHttpMessageConverter 添加新媒体类型

标签 spring jackson converters 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;
}   

最佳答案

猜测您的转换器未正确注册。我认为 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>

关于spring - 向 MappingJacksonHttpMessageConverter 添加新媒体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43514319/

相关文章:

java - 更改 JSON 键而不更改 POJO 中的变量名称

java - 将对象添加到 json 文件中对象的 JsonArray

C SIMPLE 温度转换器/摄氏度到华氏度未知错误和输出

java - @RequestParam 的 Spring 转换器

java - 如何在spring mvc中的每个请求之前附加一个单词?

Spring @Scheduled 在使用注解时执行任务两次

java - 在 Spring MVC 、 Hibernate 、 Oracle 项目中实现规则引擎所需的设计指南

java - 带有 jackson-datatype-jsr310 的 Spring 配置中的 RESTful 服务

c++ - 将 Fortran 用户定义类型转换为 C++ 类

WPF:如何在 1 个绑定(bind)中使用 2 个转换器?