add xml 2 bean 互转utils;

解决:
BeanUtil.beanToMap(outer)只能解析第一层,如果想多层解析,考虑使用JSONUtil的bug;

生产环境,常见是要 解析多层,而不是 只解析第一层;
This commit is contained in:
duandazhi
2021-06-24 13:05:32 +08:00
parent 36dcc17390
commit 96e09601e0
2 changed files with 205 additions and 0 deletions

View File

@@ -0,0 +1,103 @@
package cn.hutool.core.util;
import org.junit.Assert;
import org.junit.Test;
import javax.xml.bind.annotation.*;
/**
* {@link XmlBeanUtil} 工具类
*
* @author dazer
* 测试 xml 和 bean 互转工具类
*/
public class XmlBeanUtilTest {
@Test
public void convertToXmlTest() {
SchoolVo schoolVo = new SchoolVo();
schoolVo.setSchoolName("西安市第一中学");
schoolVo.setSchoolAddress("西安市雁塔区长安堡一号");
SchoolVo.RoomVo roomVo = new SchoolVo.RoomVo();
roomVo.setRoomName("101教室");
roomVo.setRoomNo("101");
schoolVo.setRoom(roomVo);
String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<school>\n" +
" <school_name>西安市第一中学</school_name>\n" +
" <school_address>西安市雁塔区长安堡一号</school_address>\n" +
" <room>\n" +
" <room_no>101</room_no>\n" +
" <room_name>101教室</room_name>\n" +
" </room>\n" +
"</school>\n";
Assert.assertEquals(XmlBeanUtil.convertToXml(schoolVo), xmlStr);
}
@XmlRootElement(name = "school")
@XmlAccessorType(XmlAccessType.FIELD)
private static final class SchoolVo {
@XmlElement(name = "school_name", required = true)
private String schoolName;
@XmlElement(name = "school_address", required = true)
private String schoolAddress;
@XmlElement(name = "room", required = true)
private RoomVo room;
@XmlTransient
public String getSchoolName() {
return schoolName;
}
public void setSchoolName(String schoolName) {
this.schoolName = schoolName;
}
@XmlTransient
public String getSchoolAddress() {
return schoolAddress;
}
public void setSchoolAddress(String schoolAddress) {
this.schoolAddress = schoolAddress;
}
@XmlTransient
public RoomVo getRoom() {
return room;
}
public void setRoom(RoomVo room) {
this.room = room;
}
@XmlAccessorType(XmlAccessType.FIELD)
public static final class RoomVo {
@XmlElement(name = "room_no", required = true)
private String roomNo;
@XmlElement(name = "room_name", required = true)
private String roomName;
@XmlTransient
public String getRoomNo() {
return roomNo;
}
public void setRoomNo(String roomNo) {
this.roomNo = roomNo;
}
@XmlTransient
public String getRoomName() {
return roomName;
}
public void setRoomName(String roomName) {
this.roomName = roomName;
}
}
}
}