StringBoot接收XML参数,Java解析XML参数并封装

近期接到需求,第三方会给我们回调一个XML的数据请求,那么就需要去编写一个接收XML请求并封装到实体类中进行封装调用,项目使用的是SpringBoot,对于封装XML来说,框架无所谓

项目环境:SpringBoot框架 、Java语言、 Maven版本控制器、 IDEA编译器

大致步骤

1、导包
2、根据XML映射实体类
3、编写接口
4、测试
5、遇到的坑

1、导包

解析XML格式的包,版本号自己定义即可

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

2、根据XML映射实体类

现在给出一个模板,我的XML模板

<?xml version="1.0" encoding="UTF8"?>
<STUDENTXML>
    <ID>123</ID>
    <STUNAME>张三</STUNAME>
    <SEX></SEX>
</STUDENTXML>

转换为实体如下:因为导入lombok.Data,所以省略get set,读者视情况而定

@Data
@JacksonXmlRootElement(localName ="STUDENTXML")
public class Student {
    @JacksonXmlProperty(localName ="ID")
    private Integer id;
    @JacksonXmlProperty(localName ="STUNAME")
    private String stuName;
    @JacksonXmlProperty(localName ="SEX")
    private String sex;
}

3、编写接口

@RequestMapping(value = "/info", 
	produces = {MediaType.APPLICATION_XML_VALUE, MediaType.TEXT_XML_VALUE}, 
	consumes = {MediaType.APPLICATION_XML_VALUE,MediaType.TEXT_XML_VALUE})
public Student postTest(@RequestBody Student student){
    System.out.println("传过来的xml信息转换成实体类如下:"+student.toString());
	// TODO: 2021/6/2 编写相应的逻辑
    //返回对象转为XML格式
    return student;
}

4、测试

在线测试API工具:https://www.apizza.net/ 【需要下载插件】
在线格式化XML网站:https://www.bejson.com/otherformat/xmlsort/

测试数据与返回的数据
在这里插入图片描述

5、遇到的坑

  • 请求方式限定
    • consumes中我使用的直接是多种方式,因为你访问中会有 application/xml 和 text/xml 类型不对也会导致报错。
  • 类型转换失败
    • 由于XML转换为实体是不确定类型,很有可能误解其中参数类型,导致失败
Java接收 XML 格式的参数解析成 JSONObject 和实体,你可以使用一些第三方库来完成。以下是一个示例代码: ```java import org.json.JSONObject; import org.json.XML; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.StringReader; public class XmlParser { public static JSONObject parseXmlToJson(String xml) { int PRETTY_PRINT_INDENT_FACTOR = 4; JSONObject jsonObject = XML.toJSONObject(xml); String jsonOutput = jsonObject.toString(PRETTY_PRINT_INDENT_FACTOR); return new JSONObject(jsonOutput); } public static <T> T parseXmlToEntity(String xml, Class<T> entityClass) throws JAXBException { JAXBContext jaxbContext = JAXBContext.newInstance(entityClass); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); StringReader reader = new StringReader(xml); return (T) unmarshaller.unmarshal(reader); } } ``` 上述代码使用了两个库,一个是 `org.json.XML` 来将 XML 解析为 JSONObject,另一个是 Java 自带的 JAXB(Java Architecture for XML Binding)库来将 XML 解析为实体对象。 在 `parseXmlToJson` 方法中,首先将 XML 字符串转换为 JSONObject 对象,然后将其格式化为要求的输格式。 在 `parseXmlToEntity` 方法中,首先创建一个 JAXBContext 对象,然后创建一个 Unmarshaller 对象,接着使用 StringReader 将 XML 字符串转换为 Reader 对象,最后使用 unmarshaller 对象将 Reader 转换为实体对象。 你可以根据自己的需求调用这两个方法来解析 XML 参数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值