Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将msgpack作为内容协商添加到spring mvc+;靴子_Java_Spring_Spring Boot_Jackson_Msgpack - Fatal编程技术网

Java 将msgpack作为内容协商添加到spring mvc+;靴子

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

我正在尝试添加msgpack二进制数据格式作为内容协商选项。Json和Xml开箱即用。我尝试将jackson msgpack mapper添加为bean,如中所示,但它不起作用。当我将
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());
         }
     }