一煤墙、 前言
通信時(shí)痢甘,json和java object互轉(zhuǎn)用什么距误?
對(duì)于json簸搞,咱有fastjson
https://github.com/alibaba/fastjson
雖然有些bug,但在不斷完善中。
今天的議題是:
但是因?yàn)樵鄢=右恍├舷到y(tǒng)的WebService准潭,所以會(huì)用到XML和java object互轉(zhuǎn)趁俊。
以前我都是自己用反射來(lái)寫(xiě)一個(gè)簡(jiǎn)單的一級(jí)解析。后來(lái)發(fā)現(xiàn)不夠用的了刑然。
于是換更好的庫(kù)吧寺擂。XStream
主頁(yè)傳送門(mén):
下載jar庫(kù)當(dāng)然有多種形式,我習(xí)慣了去mvnrepository.com去搜索泼掠。多年來(lái)的老習(xí)慣了怔软。
地址:
https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream
官網(wǎng)給的例子就這么簡(jiǎn)單:
XStream xstream = new XStream();
String xml = xstream.toXML(myObject); // serialize to XML
Object myObject2 = xstream.fromXML(xml); // deserialize from XML
然而做出來(lái)的效果令人發(fā)指,是類(lèi)似這樣:
<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>
可見(jiàn)择镇,它直接把包名加類(lèi)名去轉(zhuǎn)化了挡逼,那么怎么改呢?
2. 類(lèi)混疊 和 字段混疊
1) 類(lèi)混疊
// 類(lèi)混疊
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") // 類(lèi)混疊
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用法