json有Fastjson,XML我有XStream

一、 前言

通信時,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
主頁傳送門:

http://x-stream.github.io/

下載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用法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容