java - 将 msgpack 添加为 spring mvc + boot 的内容协商

标签 java spring spring-boot jackson msgpack

我正在尝试添加 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/

相关文章:

Java Spring - 列表的查找方法注入(inject)

java - 一个 validator 正确重定向,另一个 validator 根本不重定向?

不使用 setString 的 Java SQL 转义

java - java中简单的字符串匹配

java - Mockito doAnswer()

java - 如何不在控制台上打印异常

spring-boot - spring-boot 上的集成测试抛出连接被拒绝

java - 如何更改 Apache Tomcat 默认错误页面值?

java - 如何在 VSCode 中热重载 Tomcat 服务器

java - 将 byte[] 发送到 KvmSerialized 类中