我正在尝试添加msgpack二进制数据格式作为内容协商选项。 Json和Xml开箱即用。我尝试将jackson msgpack mapper添加为bean,就像在this examle中一样,但它不起作用。当我向请求to_update
添加Accept: application/x-msgpack
标头时,会返回代码。
这是我的WebConfig:
406 Not Acceptable
我没有为我的DTO对象添加任何特殊注释,我的控制器也没有任何异常。
我的msgpack依赖是:
@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"));
}
}
答案 0 :(得分:1)
显然豆注射不起作用(如果有人告诉我如何自动注射新的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);
}
//...
答案 1 :(得分:0)
可以通过两种方式完成-
使用Spring Boot只需创建HttpMessageConverter类型的@Bean即可完成这项工作。 spring boot会将其自动添加到消息转换器列表中。 (但是这样做还意味着如果没有提供Accept标头时,现有应用程序正在将“ application / json”作为默认响应返回,那么现在它将返回默认“ application / x-msgpack”)
@Bean
public HttpMessageConverter messagePackMessageConverter() {
MediaType msgPackMediaType = new MediaType("application", "x-msgpack");
return new AbstractJackson2HttpMessageConverter(new ObjectMapper(new
MessagePackFactory()), msgPackMediaType) {
};
}
此解决方案与使用WebMvcConfigurerAdapter的上述解决方案类似,但是我建议不要使用configureMessageConverters
,因为使用extendMessageConverters
会关闭默认的转换器注册在春天之前。用法示例-
configureMessageConverters