跟我快速學習XStream(三)

作者:黃少存,叩丁狼高級講師。原創(chuàng)文章,轉載請注明出處。
上一節(jié)咱們講解了在 XStream 中如何自定義標簽名和包名等操作,但是需要在 Java 代碼中使用調用方法的方式去設置這些別名,用起來比較麻煩,接下來咱們就使用注解的方式來解決.

之前的操作

  1. 修改類對應別名: xstream.alias("user", User.class);
  2. 將字段作為屬性:xstream.useAttributeFor(User.class, "id");
  3. 修改字段名:xstream.aliasField("name", User.class, "username");
  4. 隱藏集合生成標簽: xstream.addImplicitCollection(User.class, "roles");

常用注解

  1. @XStreamAliasType(value="要修改成的全限定名"): 包名修改
  2. @XStreamAlias("user") : 修改類,字段,屬性別名
  3. @XStreamAsAttribute : 將字段作為屬性
  4. @XStreamImplicit : 隱藏集合或數組屬性
  5. @XStreamOmitField : 忽略字段,不生成標簽

常用注解都比較好理解,接下來咱們就來寫個例子,看下效果

例子

模型

@Getter
@Setter
@ToString
@NoArgsConstructor
// 修改包名
@XStreamAliasType(value = "cn.wolfcode.xstream.annotation.User")
// 修改標簽名為user
@XStreamAlias("user")
public class User {
    @XStreamAsAttribute     // 設置為user標簽的屬性
    private Long id;
    @XStreamAlias("name")   // 修改屬性生成的標簽名為name
    private String username;
    @XStreamOmitField       // 不生成標簽
    private Integer age;
    @XStreamImplicit        // 集合屬性不生成標簽
    private List<Role> roles = new ArrayList<>();

    public User(Long id, String username, Integer age) {
        this.id = id;
        this.username = username;
        this.age = age;
    }
}

@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@XStreamAlias("role")
class Role {
    @XStreamAsAttribute     // 設置為role標簽的屬性
    private Long id;
    private String name;
}

這是貼了標簽的模型,接下來就是轉換了,不過不能直接像之前那樣去轉換,還需要讓 XStream 去解析注解,解析注解的方式請看解析注解

解析注解

//解析注解,xml轉對象時使用
xStream對象.processAnnotations(注解類);
//自動檢測注解(在對象轉xml中有用)
xStream對象.autodetectAnnotations(true);

好了,知道怎么解析注解之后,咱們就可以來解析 User 類的注解,然后轉化 User 對象為 xml 了,不啰嗦,上代碼.

@Test
public void testUser() throws Exception {
    XStream xStream = new XStream(new StaxDriver());
    // 自動解析注解
    xStream.autodetectAnnotations(true);
        
    User user = new User(1L, "willie", 18);
    user.getRoles().add(new Role(1L, "管理員"));
    user.getRoles().add(new Role(2L, "業(yè)務員"));
        
    String xml = xStream.toXML(user);
    //將字符串xml存到磁盤文件中,詳情看
    TransformerUtil.transform(xml,new File("user.xml"));
}

xml存入磁盤中
得到的xml如下

<?xml version="1.0" encoding="UTF-8"?>
<user id="1">
    <name>willie</name>
    <role id="1">
        <name>管理員</name>
    </role>
    <role id="2">
        <name>業(yè)務員</name>
    </role>
</user>

OK,到這里XStream使用注解自定義生成的標簽和包,屬性設置就搞定了,不過大家有沒有發(fā)現(xiàn)一個問題,就是咱們現(xiàn)在都是在用一個對象轉成 xml 或者是使用 xml 轉為對象,如果我們需要在一個 xml 中存入多個對象,解析多個對象怎么辦呢?請看下一節(jié) XStream 的對象流.

WechatIMG7.jpeg

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

相關閱讀更多精彩內容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,942評論 1 92
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 今日與往常一樣。收獲了一篇文章:《當我真正開始愛自己》當我真正開始愛自己, 我才認識到, 所有的痛苦和情感的折磨,...
    付佳婕閱讀 334評論 0 0
  • 明月當空照,莫道秋霜晚。 夜微涼,三更還未睡。 攜一盞燈火,行至庭廊處。 踱步前往,竟發(fā)覺, 那里燭火微微風中搖曳...
    魚泡泡兒閱讀 619評論 0 6

友情鏈接更多精彩內容