使用RestTemplate接收XML数据转对象与发送XML请求数据

背景

公司项目和别家公司合作开发,涉及到了接口对接,对方提供的接口文档中数据交互全部都是XMl格式,第一次遇到xml数据的接口,这里记录下对XMl数据的处理。

开始

1.认识下XMl

❤ XML 指可扩展标记语言(EXtensible Markup Language)
❤ XML 是一种标记语言,很类似 HTML
❤ XML 的设计宗旨是传输数据,而非显示数据
❤ XML 标签没有被预定义。您需要自行定义标签。
❤ XML 被设计为具有自我描述性。
❤ XML 是 W3C 的推荐标准

<?xml version="1.0"?>
<info type="1">   //info叫做节点,type叫做节点属性
<flag>true</flag>
<msg/>
<roles>
<role>
<uniqueId>ff8081815a7dfa67015a7dfaf43c0004</uniqueId>
<name>文档员</name>
<parent>OA</parent>
<type>2</type>
<sortNumber>999</sortNumber>
<roleLX>0</roleLX>
<status>0</status>
</role>
</roles>
</info>

2.JAXB

1、JDK中JAXB相关的重要Class和Interface

JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
Marshaller接口,将Java对象序列化为XML数据。
Unmarshaller接口,将XML数据反序列化为Java对象。

2、JDK中JAXB相关的重要Annotation

❤ @XmlType,将Java类或枚举类型映射到XML模式类型

❤ @XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。FIELD表示JAXB将自动 绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。

❤ @XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。

❤ @XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。

❤ @XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。

❤ @XmlRootElement,将Java类或枚举类型映射到XML元素。

❤ @XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。

❤ @XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。

3.使用RestTemplate 接收XML数据转为对象

返回的xml数据

<info>
    <flag>true</flag>
    <msg></msg>
    <roles type="1">
        <role>
            <uniqueId>ff8081815b64f631015c68559d5f0025</uniqueId>
            <name>路段中心系统操作</name>
            <parent>jchc_zhdd</parent>
            <type>2</type>
            <sortNumber>999</sortNumber>
            <roleLX>2</roleLX
  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 OpenFeign 接收 XML 格式的数据,需要进行以下步骤: 1. 添加相关依赖 在项目的 pom.xml 文件中,添加以下依赖: ```xml <dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-core</artifactId> <version>${feign.version}</version> </dependency> <dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-jackson</artifactId> <version>${feign.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>${jackson.version}</version> </dependency> ``` 其中,${feign.version} 和 ${jackson.version} 分别表示 Feign 和 Jackson 的版本号。 2. 创建 Feign 接口 创建一个 Feign 接口,并使用 @RequestLine 和 @Headers 注解来指定请求方法和请求头。示例代码如下: ```java import feign.Headers; import feign.RequestLine; @Headers({"Content-Type: application/xml", "Accept: application/xml"}) public interface MyFeignClient { @RequestLine("POST /path/to/api") MyResponse sendXml(MyRequest request); } ``` 其中,MyRequest 和 MyResponse 分别表示请求和响应的实体类。 3. 配置 Feign 在配置类中,添加以下配置: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter; import org.springframework.http.converter.xml.MarshallingHttpMessageConverter; import org.springframework.oxm.jaxb.Jaxb2Marshaller; import org.springframework.web.client.RestTemplate; @Configuration public class MyFeignConfiguration { @Bean public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(new MappingJackson2XmlHttpMessageConverter()); restTemplate.getMessageConverters().add(new MarshallingHttpMessageConverter(jaxb2Marshaller())); return restTemplate; } @Bean public Jaxb2Marshaller jaxb2Marshaller() { Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); marshaller.setPackagesToScan("com.example"); return marshaller; } } ``` 其中,MappingJackson2XmlHttpMessageConverter 和 MarshallingHttpMessageConverter 分别表示 JSON 和 XML换器。 4. 发送请求 在需要发送请求的地方,注入 Feign 接口,并调用方法即可。示例代码如下: ```java @Autowired private MyFeignClient myFeignClient; public void sendXml() { MyRequest request = new MyRequest(); // 设置请求参数 MyResponse response = myFeignClient.sendXml(request); // 处理响应结果 } ``` 其中,MyRequest 和 MyResponse 分别表示请求和响应的实体类。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值