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 toBean(Object obj, Class 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="张三251992-10-19 00:00:00.0 CST";
        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中转适合多系统交互时转对象。。其他情况下不如强转方便




你可能感兴趣的:(PersonalNotes)