Java 将msgpack作为内容协商添加到spring mvc+;靴子
我正在尝试添加msgpack二进制数据格式作为内容协商选项。Json和Xml开箱即用。我尝试将jackson msgpack mapper添加为bean,如中所示,但它不起作用。当我将Java 将msgpack作为内容协商添加到spring mvc+;靴子,java,spring,spring-boot,jackson,msgpack,Java,Spring,Spring Boot,Jackson,Msgpack,我正在尝试添加msgpack二进制数据格式作为内容协商选项。Json和Xml开箱即用。我尝试将jackson msgpack mapper添加为bean,如中所示,但它不起作用。当我将Accept:application/x-msgpack头添加到我的请求时,406不可接受返回代码 这是我的网络配置: @Configuration @EnableWebMvc @SuppressWarnings("unused") public class WebConfig extends WebMvcConf
Accept:application/x-msgpack
头添加到我的请求时,406不可接受
返回代码
这是我的网络配置:
@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对象添加任何特殊的注释,我的控制器也并没有什么不寻常的地方
我的msgpack依赖项是:
org.msgpack:jackson-dataformat-msgpack:0.7.0-p3
显然bean注入没有起作用(如果有人告诉我如何自动注入新的
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);
}
//...
公共类WebConfig扩展了WebMVCConfigureAdapter{
@凌驾
public void configureMessageConverters(列表可通过两种方式完成-
使用spring boot,只要创建一个类型为HttpMessageConverter的@Bean就可以了。spring boot会自动将它添加到消息转换器列表中。(但这样做也意味着,如果现有应用程序在未提供Accept标头时返回“application/json”作为默认响应,那么它现在将返回默认值。)“应用程序/x-msgpack”)
此解决方案类似于上面使用WebMVCConfigureAdapter的解决方案,但我建议使用extendMessageConverters
,而不是使用configureMessageConverters
,因为使用configureMessageConverters
将关闭spring完成的默认转换器注册。用法示例-
@Configuration
class WebConfig implements WebMvcConfigurer {
HttpMessageConverter messagePackMessageConverter() {
MediaType msgPackMediaType = new MediaType("application", "x-msgpack");
return new AbstractJackson2HttpMessageConverter( new ObjectMapper( new
MessagePackFactory()), msgPackMediaType) {
};
}
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters)
{
converters.add(messagePackMessageConverter());
}
}
@配置
类WebConfig实现WebMVCConfiguer{
HttpMessageConverter messagePackMessageConverter(){
MediaType msgPackMediaType=新的MediaType(“应用程序”、“x-msgpack”);
返回新的AbstractJackson2HttpMessageConverter(新的ObjectMapper(新的
MessagePackFactory()),msgPackMediaType){
};
}
@凌驾
public void extendMessageConverters(列表
@Configuration
class WebConfig implements WebMvcConfigurer {
HttpMessageConverter messagePackMessageConverter() {
MediaType msgPackMediaType = new MediaType("application", "x-msgpack");
return new AbstractJackson2HttpMessageConverter( new ObjectMapper( new
MessagePackFactory()), msgPackMediaType) {
};
}
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters)
{
converters.add(messagePackMessageConverter());
}
}