首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring 5 -jackson-dataformat-xml使用XML强制@ResponseBody

Spring 5 -jackson-dataformat-xml使用XML强制@ResponseBody
EN

Stack Overflow用户
提问于 2021-03-23 02:57:50
回答 3查看 340关注 0票数 0

我必须在一个遗留的Spring5上工作,而不是启动项目,我面临着类似的问题,所以我开始在控制器中使用XMLMapper - jackson-dataformat-xml turns @ResponseBody to XML is application/text,这是xml string和out put json。但是我发现,一旦我添加了依赖项

代码语言:javascript
复制
<dependency>
<artifactId>jackson-dataformat-xml</artifactId>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<version>2.10.2</version>
</dependency>

响应似乎不再是JSON,而是xml,我不知道应该做什么。我需要使用xmlmapper来避免JAXB2。任何示例配置。[Java config也可以,但不能使用java 8的lambda函数,因为我们在这个项目中有一些遗留的依赖项,比如checkstyle没有升级到java 8。help...Let me会知道吗?

我目前有以下配置,但我认为问题是与依赖性。因此,需要在配置中进行一些调整:

代码语言:javascript
复制
@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()));

    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-03-29 23:52:38

有很多地方我需要修复。我们还使用Apache HTTP客户端来调用后端服务。来自这些服务的响应也被破坏了,他们开始重新调整xml。因为这是一段常见的代码,所以我用json的q=1修改了"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控制器,它必须被修复。我必须配置消息转换器和内容协商

代码语言:javascript
复制
@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);
    }

}
票数 0
EN

Stack Overflow用户

发布于 2021-03-23 03:00:36

您有没有尝试指定响应类型?

代码语言:javascript
复制
@PostMapping(value = "/content", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody

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

票数 0
EN

Stack Overflow用户

发布于 2021-03-23 03:24:02

您是否在HTTP请求中设置了ACCEPT标头?如果spring配置为返回这两种类型,则应将ACCEPT标头设置为所需的类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66752245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档