引入了jackson-dataformat-xml 包我的接口全变成了xml格式

发现接口返回对象值变成了xml很奇怪

理论上使用@RestController注解,返回对象应该为json
在这里插入图片描述
但是最近写了接口却默认返回了xml格式

在这里插入图片描述
经调查发现,pom.xml中引入了下面组件。

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

解决方案

  1. 将该组件注释掉,接口返回数据恢复为json。
  2. 可以指定返回值类型@GetMapping(value =“/hello” ,produces=“application/json”)
  3. 添加配置类,调整消息转换器优先级
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebMvcConfigSort implements WebMvcConfigurer {

//写法1
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 通过遍历消息转换器列表找到 MappingJackson2HttpMessageConverter 和 MappingJackson2XmlHttpMessageConverter
        // 并修改它们的顺序
        HttpMessageConverter<?> jacksonConverter = null;
        HttpMessageConverter<?> jacksonXmlConverter = null;

        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                jacksonConverter = converter;
            }
            if (converter instanceof MappingJackson2XmlHttpMessageConverter) {
                jacksonXmlConverter = converter;
            }
        }

        // 如果找到了对应的转换器,则进行顺序调整
        if (jacksonConverter != null && jacksonXmlConverter != null) {
            converters.remove(jacksonConverter);
            converters.add(0, jacksonConverter);
        }
    }
 
//写法2
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.defaultContentType(MediaType.APPLICATION_JSON, MediaType.TEXT_XML, MediaType.APPLICATION_XML);
    }
}
  1. 调用方法时,header中加入
    在这里插入图片描述
  2. 若组件为间接引入,可使用排除组件,排除方式有两种
写法1:
<dependency>
   <groupId>com.AA.AA</groupId>
    <artifactId>AA-common</artifactId>
    <version>${project.version}</version>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </exclusion>
    </exclusions>
</dependency>
            
写法2:
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.AA.AA</groupId>
                <artifactId>AA-common</artifactId>
                <version>${project.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.dataformat</groupId>
                        <artifactId>jackson-dataformat-xml</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    </dependencyManagement>

网上查到一种新方法,还没测试
spring.properties设置spring.xml.ignore设置为true

具体原因,可参考https://hafuhafu.com/archives/springboot-jackson-xml-result-json博主的文章

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中,可以使用JAXB(Java Architecture for XML Binding)或者Jackson Dataformat XML来将XML数据转换为Java实体对象。 使用JAXB: 1. 首先,在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.1</version> </dependency> ``` 2. 创建一个实体类,使用JAXB注解标识需要绑定的XML元素或属性。 ```java @XmlRootElement(name = "user") @XmlAccessorType(XmlAccessType.FIELD) public class User { @XmlElement private String name; @XmlElement private int age; // getter和setter方法 } ``` 3. 使用JAXBContext将XML数据转换为Java实体对象。 ```java String xmlData = "<user><name>John</name><age>30</age></user>"; JAXBContext jaxbContext = JAXBContext.newInstance(User.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); User user = (User) unmarshaller.unmarshal(new StringReader(xmlData)); ``` 使用Jackson Dataformat XML: 1. 首先,在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.12.1</version> </dependency> ``` 2. 创建一个实体类。 ```java @JacksonXmlRootElement(localName = "user") public class User { @JacksonXmlProperty(localName = "name") private String name; @JacksonXmlProperty(localName = "age") private int age; // getter和setter方法 } ``` 3. 使用XmlMapper将XML数据转换为Java实体对象。 ```java String xmlData = "<user><name>John</name><age>30</age></user>"; XmlMapper xmlMapper = new XmlMapper(); User user = xmlMapper.readValue(xmlData, User.class); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值