如何在SpringBoot 1.5.x中对HttpMessageConverters进行排序/排序/优先

时间:2019-07-17 05:38:10

标签: java spring spring-boot content-negotiation jackson-dataformat-xml

我需要在我的spring-boot 1.5.12服务以及以下对classpath的依赖项之一中支持XML和JSON

  • jackson-dataformat-xml
  • jackson-json依赖项(作为spring-web starter的一部分提供)

我创建了 MappingJackson2XmlHttpMessageConverter Bean,以支持Jackson自身的XML(与JSON保持一致)

    @Bean
    public MappingJackson2XmlHttpMessageConverter xmlHttpConverter(ObjectMapper xmlMapper) {
        MappingJackson2XmlHttpMessageConverter xmlConverter = new MappingJackson2XmlHttpMessageConverter();
        xmlConverter.setObjectMapper(xmlMapper);
        return xmlConverter;
    }

    @Bean
    public ObjectMapper xmlMapper() {
        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
        xmlMapper.setSerializationInclusion(Include.NON_NULL);
        return xmlMapper;
    }

但是自从我进行了这些更改之后,XML在所有方面都比JSON优先(RestTemplate调用和服务 / health / info 检查)

我已经在RestTemplate调用中添加了Content-Type标头,但是我们的CI-CD Infra调用了执行器端点,现在受到影响了,我想对转换器进行排序/排序,使其更改很少,或者将JSON用作默认的Content-Type服务。

我知道/health.json和/info.json可以工作,但是我不能要求Infra团队更改此服务的逻辑,

我看到了官方文档here,我喜欢这种方法,但是我想知道如何通过注入而不是通过继承WebMvcConfigureAdapter来获取所有现有的转换器。

请提出其他解决问题的更好方法。

0 个答案:

没有答案