XStream 遇到的问题

  1.xstream xml转bean对象,双划线问题

   解决:主要是用到了new XmlFriendlyNameCoder("_-", "_"),在创建XStream对象时可XStream xStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));

  2.获取节点的属性值以及自身值

    方法1:@XStreamConverter(value=ToAttributedValueConverter.class, strings={"value"})

           对应的value是bean对象的属性名,具体示例:

@XStreamAlias("RETURNCODE")
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"value"})
public class ReturnCodeVO {

    @XStreamAsAttribute
    @XStreamAlias("CODE")
    private String code;

    @XStreamAsAttribute
    @XStreamAlias("MSG")
    private String msg;

    @XStreamAsAttribute
    @XStreamAlias("CMSG")
    private String cmsg;

    private String value;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCmsg() {
        return cmsg;
    }

    public void setCmsg(String cmsg) {
        this.cmsg = cmsg;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

 

    方法2:使用转换器Converter,具体示例如下:

  

public class CityConverter implements Converter {

    public void marshal(Object value, HierarchicalStreamWriter writer, 
                                                               MarshallingContext context) {
        City city = (City) value;
        writer.addAttribute("id", city.getId());
        writer.addAttribute("type", city.getType().toString());
        writer.setValue(city.getName());
    }

    public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
        City city = new City();
        city.setName(reader.getValue());
        city.setId(reader.getAttribute("id"));
        city.setType(reader.getAttribute("type"));
        return city;
    }

    public boolean canConvert(Class clazz) {
        return clazz.equals(City.class);
    }

}

  调用XStream时进行设置:

  XStream xStream = new XStream();

  xStream.registerConverter(new CityConverter());

   xStream.alias("loc", City.class);

 

转载于:https://www.cnblogs.com/zgz21/p/8626861.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值