跟我快速学习XStream(三)

作者:黄少存,叩丁狼高级讲师。原创文章,转载请注明出处。
上一节咱们讲解了在 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, "业务员"));

    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>业务员</name>
    </role>
</user>

OK,到这里XStream使用注解自定义生成的标签和包,属性设置就搞定了,不过大家有没有发现一个问题,就是咱们现在都是在用一个对象转成 xml 或者是使用 xml 转为对象,如果我们需要在一个 xml 中存入多个对象,解析多个对象怎么办呢?请看下一节 XStream 的对象流.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值