xstream自定义转换_xstream 自定义 Converter

今天开发接口,遇到xml的格式比较特别大概格式为

111111

2222

333

4444

目前解决思路就是将R看做Map, C看做一个键值对。

111111

2222

理解为

{

RECORD_ID: 111111,

ORG_NO: 2222

}

定义一个JavaBean用来描述

@XStreamAlias("R")

@XStreamConverter(ResultConverter.class)

public class Result {

public Map result = new HashMap();

public void put(String key, Object val){

result.put(key, val);

}

public void putAll(Map map) {

result.putAll(map);

}

public Object get(String key) {

return result.get(key);

}

}

Converter类

public class ResultConverter implements Converter {

@Override

public boolean canConvert(Class class_) {

return "com.zhbr.ws.inf.yx.ws.entity.yxhc2.Result".equals(class_.getName());

}

@Override

public void marshal(Object source, HierarchicalStreamWriter writer,

MarshallingContext context) {

Result r = (Result) source;

Map result = r.result;

if(result.isEmpty()) return;

for(Entry entry: result.entrySet()){

writer.startNode("C");

writer.addAttribute("N", entry.getKey());

writer.setValue( StrUtil.toStr(entry.getValue()));

writer.endNode();

}

}

@Override

public Object unmarshal(HierarchicalStreamReader reader,

UnmarshallingContext context) {

Result r = new Result();

while (reader.hasMoreChildren()) {

reader.moveDown();

if ("C".equals(reader.getNodeName())) {

String col = reader.getAttribute("N");

String val = reader.getValue();

r.put(col, val);

}

reader.moveUp();

}

return r;

}

}

测试

Result r = new Result();

r.put("RETURN_MSG", "xxx");

r.put("RETURN_FLAG", "0");

String xml = XmlUtil.toXml(r);

System.out.println(xml);

Result r2 = XmlUtil.toBean(xml, Result.class);

System.out.println(r2);

输出

xxx

0

RETURN_MSG: xxx,RETURN_FLAG: 0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值