一、 前言
通信時,json和java object互轉(zhuǎn)用什么?
對于json,咱有fastjson
https://github.com/alibaba/fastjson
雖然有些bug,但在不斷完善中。
今天的議題是:
但是因為咱常接一些老系統(tǒng)的WebService,所以會用到XML和java object互轉(zhuǎn)。
以前我都是自己用反射來寫一個簡單的一級解析。后來發(fā)現(xiàn)不夠用的了。
于是換更好的庫吧。XStream
主頁傳送門:
下載jar庫當(dāng)然有多種形式,我習(xí)慣了去mvnrepository.com去搜索。多年來的老習(xí)慣了。
地址:
https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream
官網(wǎng)給的例子就這么簡單:
XStream xstream = new XStream();
String xml = xstream.toXML(myObject); // serialize to XML
Object myObject2 = xstream.fromXML(xml); // deserialize from XML
然而做出來的效果令人發(fā)指,是類似這樣:
<cn.qlq.bean.User>
<name>zhangsan</name>
<age>2</age>
<birthDay>2019-12-03 11:30:44.703 UTC</birthDay>
<groups>
<cn.qlq.bean.Group>
<id>1</id>
<name>g1</name>
</cn.qlq.bean.Group>
<cn.qlq.bean.Group>
<id>2</id>
<name>g2</name>
</cn.qlq.bean.Group>
</groups>
</cn.qlq.bean.User>
可見,它直接把包名加類名去轉(zhuǎn)化了,那么怎么改呢?
2. 類混疊 和 字段混疊
1) 類混疊
// 類混疊
xstream.alias("User", User.class);
xstream.alias("Group", Group.class);
這下好多了
<User>
<userName>zhangsan</userName>
<age>2</age>
<birthDay>2019-12-05 03:27:42.700 UTC</birthDay>
<groups>
<Group>
<id>1</id>
<groupName>g1</groupName>
</Group>
<Group>
<id>2</id>
<groupName>g2</groupName>
</Group>
</groups>
</User>
2) 字段混疊
當(dāng)然還有字段混疊:
// 字段混疊
xstream.aliasField("userName", User.class, "name");
xstream.aliasField("groupName", Group.class, "name");
結(jié)果如下:
<User>
<userName>zhangsan</userName>
<age>2</age>
<birthDay>2019-12-05 03:27:42.700 UTC</birthDay>
<groups>
<Group>
<id>1</id>
<groupName>g1</groupName>
</Group>
<Group>
<id>2</id>
<groupName>g2</groupName>
</Group>
</groups>
</User>
3) 注解處理混疊 更優(yōu)雅
@XStreamAlias("person") // 類混疊
public class User {
@XStreamAlias("username") // 字段混疊
@XStreamAsAttribute // 字段作為屬性
private String name;
@XStreamAlias("年齡") // 字段混疊
private int age;
@XStreamOmitField // 忽略字段
private Date birthDay;
@XStreamImplicit // 隱式集合混疊
private List<Group> groups;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
public User(String name, int age, Date birthDay) {
super();
this.name = name;
this.age = age;
this.birthDay = birthDay;
}
public List<Group> getGroups() {
return groups;
}
public void setGroups(List<Group> groups) {
this.groups = groups;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", birthDay=" + birthDay + ", groups=" + groups + "]";
}
}
參考文獻(xiàn):
XStream處理XML用法