xStream xml反序列化时 强转对象相关问题

前几天心血来潮尝试着把公司的ssm框架拷出来,然后把json处理的jar包替换成fastJson,再来个注解自动反序列化,再在request和response上套个base64加密(公司是这么做的,改起来是一把辛酸一把泪,特别是重写getParameterMap()这个类,字符串数组好烦发火),这样看起来高大上。。具体可以参照

http://blog.163.com/liangge_sky/blog/static/210500188201422701631432

然而这不是重点。。。。。。。。

最近几天想着既然json都可以搞注解自动反序列化,为啥xml不也搞一个呢,然后搜了一堆jar包一堆资料,最后选了xStream,实际操作的时候和@json差不多,关键卡在两个地方,1.getParameterMap();2.xStream.fromXML()强转对象。

第一个问题在于原本我是base64加密的。。然后在filter里解密后不知道怎么放了。。后来想了一晚上。。。xml好多都是系统间交互的比如 微信公共号接口。。。。谁闲得无聊加密啊(我没有遇到这需求。也觉着暂时用不到这功能,再说xml本来就是String 再加个密,好长。。。),果断把请求路径添加到base64filter忽略列表里。。

然后,关于第二个问题第二天上班的时候脑子里也想着这个,搜了一堆资料就是没有像fastJson那种JSON.parseObject(jsonStr, Person.class)分分钟解决战斗,直接给返回个对象的,强转的话知道类似Person.class的也没法用啊(后面有空在研究如何强转),然后的然后陡然想起来以前看公司源码里工具类JsonUtils(用Jackson实现的)有个toBean方法实现如下方法

public static <T> T toBean(Object obj, Class<T> cls) {
if (null == obj) {
return null;
}
try {
return JsonFormatter.toObject(JsonUtil.toString(obj), cls);
} catch (Exception e) {
            LOG.error("JsonFormatter.toObject error: ", e);
}
return null;
}

就是说我先把object转化成json串,然后在反序列化得意

依照这思想我写了个测试方法引用fastjson的jar

 @Test
    public void testXmlToBean(){
        String message="<person><name>张三</name><age>25</age><birthDay>1992-10-19 00:00:00.0 CST</birthDay></person>";
        XStream xStream=new XStream();
        //注解声明节点
        xStream.processAnnotations(Person.class);
        //xStream转对象
        Object obj=xStream.fromXML(message);
        System.out.println("message:"+JSON.toJSONString(obj));
        //fastJson中转
        String jsonStr=JSON.toJSONString(obj);
        System.out.println("message:"+jsonStr);
        //fastJson生成对象
        Person person=JSON.parseObject(jsonStr, Person.class);
        System.out.println("message:"+JSON.toJSONString(person));
    }

果然成功了。。。先在这边写个随笔,回家把代码改改生气

<----------------------------------------------------------------------------------------------------------------------------------------->

回家试了试发现不需要这么麻烦。。

Person person=(Person)xStream.fromXML(message);

就可以了。fastJson中转适合多系统交互时转对象。。其他情况下不如强转方便




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值