我正在尝试添加 msgpack 二进制数据格式作为内容协商选项。 Json 和 Xml 开箱即用,运行良好。我尝试将 jackson msgpack 映射器添加为 bean,如 this examle 中所示,但它不起作用。当我将 Accept: application/x-msgpack
header 添加到我的请求时,返回 406 Not Acceptable
代码。
这是我的 WebConfig:
@Configuration
@EnableWebMvc
@SuppressWarnings("unused")
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public HttpMessageConverter messagePackMessageConverter() {
return new AbstractJackson2HttpMessageConverter(
new ObjectMapper(new MessagePackFactory()),
new MediaType("application", "x-msgpack")) {
};
}
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false)
.ignoreAcceptHeader(false)
.favorParameter(true)
.defaultContentType(MediaType.APPLICATION_JSON)
.mediaType("xml", MediaType.APPLICATION_XML)
.mediaType("msgpack", new MediaType("application", "x-msgpack"));
}
}
我没有向我的 DTO 对象添加任何特殊注释,我的 Controller 也没有什么异常。
我的 msgpack 依赖项是:
org.msgpack:jackson-dataformat-msgpack:0.7.0-p3
最佳答案
显然 Bean 注入(inject)不起作用(如果有人向我展示如何自动注入(inject)新的 HttpMessageConverter
,我会很高兴)。所以我手动添加了它:
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(messagePackMessageConverter());
converters.add(new MappingJackson2HttpMessageConverter());
converters.add(new MappingJackson2XmlHttpMessageConverter());
super.configureMessageConverters(converters);
}
//...
关于java - 将 msgpack 添加为 spring mvc + boot 的内容协商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36165219/