jackson dataformat xml强制@responsebody使用xml

wz3gfoph  于 2021-07-16  发布在  Java
关注(0)|答案(3)|浏览(454)

我必须处理一个遗留的spring5[not boot]项目,我面临类似的问题,比如jackson dataformat xml将@responsebody转换为xml,所以我开始使用xmlmapper-input是application/text[这是xml字符串],output应该是控制器中的json。但我一加上依赖性就明白了

<dependency>
<artifactId>jackson-dataformat-xml</artifactId>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<version>2.10.2</version>
</dependency>

响应似乎不再是json而是xml,我不知道该怎么做。我需要使用xmlmapper来避免jaxb2。任何示例配置[java配置也可以,但不使用java 8 lambda函数,因为它没有在这个遗留项目中使用[因为我们有某些遗留依赖项,如checkstyle,在这个项目中没有升级到java 8。]会有帮助…让我知道。
我目前有以下配置,但我认为问题是依赖性。因此,需要在配置中进行一些调整:

@Configuration
public class HttpResponseConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.indentOutput(true).dateFormat(new SimpleDateFormat("yyyy-MM-dd"));
        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
        converters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()));

    }
}
wrrgggsh

wrrgggsh1#

您尝试过指定响应类型吗?

@PostMapping(value = "/content", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody

https://www.baeldung.com/spring-request-response-body

jgzswidk

jgzswidk2#

您在http请求中设置了accept头吗?如果spring配置为返回这两种类型,那么应该将accept头设置为所需的类型。

3xiyfsfu

3xiyfsfu3#

有很多地方我需要修理。我们还使用apachehttp客户端来调用后端服务。来自这些服务的响应也被破坏了(它们开始重新调整xml)。因为这是一段常见的代码,所以我用q=1修改了json的“accept”头。 http.setHeader("Accept","application/json;q=1, text/html;q=0.9, application/xhtml+xml;q=0.9, application/xml;q=0.8, */*;q=0.7"); 然后是必须修理的Spring控制器。我必须配置消息转换器以及两者

@Configuration
@EnableWebMvc
public class HttpResponseConfig implements WebMvcConfigurer {
    @Autowired
    ObjectMapperFactory objectMapperFactory;//custom

    @Bean
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(objectMapperFactory.getObjectMapper());
        return converter;
    }

    @Override
    public void extendMessageConverters(final List<HttpMessageConverter<?>> converters) {
        converters.add(0, new MappingJackson2HttpMessageConverter(mappingJackson2HttpMessageConverter().getObjectMapper()));

    }

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.defaultContentType(MediaType.APPLICATION_JSON_UTF8);
    }

}

相关问题