Java中XML字符串与Bean对象相互转换
引入依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.13.1</version>
</dependency>
数据模型类
package vo;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.Data;
import java.util.List;
@Data
@JacksonXmlRootElement(localName = "res")
public class ResponseData {
/**
* 响应码:200表示成功
*/
@JacksonXmlProperty()
private String resultCode;
/**
* 响应描述
*/
@JacksonXmlProperty()
private String resultDesc;
/**
* 支付记录列表
*/
@JacksonXmlElementWrapper(localName = "payList")
@JacksonXmlProperty()
private List<PaymentRecord> paymentList;
}
package vo;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.Data;
/**
* 支付记录详情
*/
@Data
@JacksonXmlRootElement()
public class PaymentRecord {
/**
* 诊疗流水号
*/
@JacksonXmlProperty()
private String clinicSequence;
/**
* 医院编号
*/
@JacksonXmlProperty()
private String hospitalCode;
/**
* 科室编号
*/
@JacksonXmlProperty()
private String departmentCode;
}
转换工具类
package util;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
/**
* XML与Java对象转换工具
*
* @author DaenMax
* 2022-4-20 11:11:15
*/
public class XmlConverter {
/**
* XML字符串转Java对象
*
* @param xmlStr XML字符串
* @param clazz 对象类型
* @param <T> 泛型参数
* @return 转换后的对象
*/
public static <T> T xmlToObject(String xmlStr, Class<T> clazz) {
if (xmlStr != null && !xmlStr.isEmpty()) {
try {
return new XmlMapper().readValue(xmlStr, clazz);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return null;
}
/**
* Java对象转XML字符串
*
* @param obj 待转换的对象
* @return XML字符串
*/
public static String objectToXml(Object obj) {
if (obj != null) {
try {
XmlMapper mapper = new XmlMapper();
// 添加XML声明信息
mapper.enable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION);
// 忽略空值字段
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return null;
}
}
示例演示
import util.XmlConverter;
import vo.ResponseData;
import vo.PaymentRecord;
import java.util.ArrayList;
import java.util.List;
public class TestConversion {
public static void main(String[] args) {
generateXml();
parseXml();
}
/**
* 构造XML
*/
public static void generateXml() {
ResponseData response = new ResponseData();
response.setResultCode("200");
response.setResultDesc("操作成功");
List<PaymentRecord> records = new ArrayList<>();
PaymentRecord record1 = new PaymentRecord();
record1.setClinicSequence("123456");
record1.setHospitalCode("阿萨德");
record1.setDepartmentCode("fff");
records.add(record1);
PaymentRecord record2 = new PaymentRecord();
record2.setClinicSequence("98465");
record2.setHospitalCode("设定图");
record2.setDepartmentCode("bbb");
records.add(record2);
PaymentRecord record3 = new PaymentRecord();
record3.setClinicSequence("4567854");
record3.setHospitalCode("换接口");
record3.setDepartmentCode("jjj");
records.add(record3);
response.setPaymentList(records);
String xml = XmlConverter.objectToXml(response);
System.out.println(xml);
}
/**
* 解析XML
*/
public static void parseXml() {
String xml = "<?xml version='1.0' encoding='UTF-8'?><res><resultCode>200</resultCode><resultDesc>操作成功</resultDesc><payList><paymentRecord><clinicSequence>123456</clinicSequence><hospitalCode>阿萨德</hospitalCode><departmentCode>fff</departmentCode></paymentRecord><paymentRecord><clinicSequence>98465</clinicSequence><hospitalCode>设定图</hospitalCode><departmentCode>bbb</departmentCode></paymentRecord><paymentRecord><clinicSequence>4567854</clinicSequence><hospitalCode>换接口</hospitalCode><departmentCode>jjj</departmentCode></paymentRecord></payList></res>\n";
ResponseData response = XmlConverter.xmlToObject(xml, ResponseData.class);
System.out.println(response);
}
}
效果展示

相关扩展
另有Java XML字符串和JSON字符串互转的实现,请参考:https://www.cnblogs.com/daen/p/16779870.html