我应该如何在 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 标签