springboot引入ackson Dataformat XML后原本返回json的却返回xml

springboot引入ackson Dataformat XML后原本返回json的却返回xml

springboot引入jackson Dataformat XML后原本返回json的却返回xml

今天项目需要生成xml文件,才引入了jackson2的依赖,后来写完才发现原本返回json格式的数据都变成了xml,找了好多博客都没有解决。希望这篇博客能帮助到大家。

问题原因

本人学艺不精,目前为止只能看出来引入jackson2后,有个叫configureContentNegotiation(配置内容协商,大概作用是控制返回的类型,详情请看看springmvc的执行流程,反正我已经忘了)会增加对xml的支持。增加前后的对比如下:

//添加依赖前
org.springframework.http.converter.ByteArrayHttpMessageConverter@53ec6b78
org.springframework.http.converter.StringHttpMessageConverter@86862c4
org.springframework.http.converter.StringHttpMessageConverter@3bd45da5
org.springframework.http.converter.ResourceHttpMessageConverter@1cd56bd0
org.springframework.http.converter.ResourceRegionHttpMessageConverter@61fcbf84
org.springframework.http.converter.xml.SourceHttpMessageConverter@517baf68
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@48dbe997
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@468ea69a
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@7fe790b7
org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@7b630050
//添加依赖后
org.springframework.http.converter.ByteArrayHttpMessageConverter@72ed3aa
org.springframework.http.converter.StringHttpMessageConverter@3cb9cba5
org.springframework.http.converter.StringHttpMessageConverter@2bb37ac4
org.springframework.http.converter.ResourceHttpMessageConverter@3f45ef58
org.springframework.http.converter.ResourceRegionHttpMessageConverter@24b8c53c
org.springframework.http.converter.xml.SourceHttpMessageConverter@55faf182
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@652fd4a3
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@5db86801
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@7500c871
org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter@35ad8cf1
org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter@177372c8

反正就是多了,我不管(傲娇)。这里其实只是增加了对xml的支持,其实到这里影响不大。主要的原因还是在浏览器
在这里插入图片描述
别问我是什么浏览器,问就是谷歌。看的出在请求头部,浏览器对xml的支持有限级很高,这样的话我们的json就会被xml挤下去(心疼json两秒钟)。

解决方式

原因也知道了,一下是我总结的3种方案,总有一种适合你。bui bui bui

  1. 首先就是最简单的,移除jackson Dataformat XML依赖(这种好蠢呀,我都不想往上写。此处省略好多表情)
		<!-- 就是他 删了就行了-->
		<dependency>
			<groupId>com.fasterxml.jackson.dataformat</groupId>
			<artifactId>jackson-dataformat-xml</artifactId>
		</dependency>
  1. 在请求的时候指定json格式返回 produces = “application/json” 就可以了(太麻烦,每个都要加)
  @RequestMapping(value = "generateXml",produces = "application/json")
    public ResultUtil generateXml(Integer id) throws IOException {
       	代码省略...
    }
  1. 最后一种就是配置configureContentNegotiation,简单说就是把jackson Dataformat XML加个xml支持给干掉。
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    /***
    * @Author: lzl
    * @Date: 2023/5/25 13:57
    * @return: void
    * @Description: 这是排除掉xml格式的返回值,如果需要使用xml返回请注掉本块代码
    */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        List<HttpMessageConverter<?>> converterList = new ArrayList<>();
        for (HttpMessageConverter<?> converter : converters) {
            if (!converter.getClass().equals(MappingJackson2XmlHttpMessageConverter.class)) {
                converterList.add(converter);
            }
        }
        converters.clear();
        converters.addAll(converterList);
    }
 	/***
    * @Author: lzl
    * @Date: 2023/5/25 13:57
    * @return: void
    * @Description: 这个是默认json返回,我感觉没有实际作用
    */
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.defaultContentType(MediaType.APPLICATION_JSON);
    }
}

  1. 这一种不算解决,只是说明一下,如果系统想要同时支持json和xml上面的都不需要配置,只需要前端请求的时候指定一下头部信息就可以了
    在这里插入图片描述

最后说明

这玩意咋加表情呀,我找了半天没找到,知道的请吱一声。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值