我应该如何在 Spring Boot 中配置 httpMessageConverters 以将消息转换为所需的格式?

Posted

技术标签:

【中文标题】我应该如何在 Spring Boot 中配置 httpMessageConverters 以将消息转换为所需的格式?【英文标题】:How should I configure httpMessageConverters in Spring boot to convert messages into required format? 【发布时间】:2016-08-21 15:32:09 【问题描述】:

我使用Spring Boot 编写了一个api 服务,它以Google ProtoBuf 格式提供请求。我的要求是每当用户使用application-json format 的接受标头点击我的服务时,我想使用proto-buf-java Format 将呈现的原型对象转换为JSON 格式(用于将JSON 字符串与原型对象相互转换的库)。现在发生的事情是每当用户点击application/x-protobuf格式时,spring使用protobufHTTPMessageConverter转换为所需的格式,但是当用户点击Json格式时,spring boot使用默认JacksonMapper,它无法转换为JsonString。我是Spring Boot 的新手,我也需要配置消息转换器以服务JSON 格式的解决方案。

【问题讨论】:

有没有尝试复现github.com/making/spring-mvc-tutorial-protobuf等基础教程?如果你卡住了,请提供一些代码,运行时错误消息... 谢谢,我忘了在 pom.xml 中添加对 Protobuf Java 格式的依赖。你是谁在维护这个库mvnrepository.com/artifact/com.googlecode.protobuf-java-format/…。这个库可以用来将 protos 转换为 Json 吗? 您将在您链接的页面底部找到该库所有者的姓名和电子邮件。 【参考方案1】:

尝试添加下面的类。假设您打开 AutoScan,SpringBoot 应该扫描它。在请求您的 API 时,它将默认返回序列化为 JSON 的对象,或者只是将 &mediaType=json 添加到请求中。

@EnableWebMvc
@Configuration
public class CustomConfig extends WebMvcConfigurerAdapter

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters)
    
        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        mappingJackson2HttpMessageConverter.setPrettyPrint(true);
        mappingJackson2HttpMessageConverter.getObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
        converters.add(mappingJackson2HttpMessageConverter);
    

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer)
    
        configurer.defaultContentType(MediaType.APPLICATION_JSON);
        configurer.favorPathExtension(false);
        configurer.favorParameter(true);
        configurer.ignoreAcceptHeader(true);
        configurer.useJaf(false);
        configurer.parameterName("mediaType");
        configurer.mediaType("json", MediaType.APPLICATION_JSON);
    

【讨论】:

以上是关于我应该如何在 Spring Boot 中配置 httpMessageConverters 以将消息转换为所需的格式?的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 应用程序中配置 cors。 Bean CorsConfigurationSource 不起作用

使用 spring-boot:run 时是不是可以使用 spring-boot 命令行属性?

如何使用 Thymeleaf 配置 Spring Boot 并使用 sec:authentication 标签

如何配置多模块spring应用

如何让 Spring Boot 使用 MultiTenantSpringLiquibase?

如何配置两个实例mongodb使用spring boot和spring data