前几天心血来潮尝试着把公司的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
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="
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中转适合多系统交互时转对象。。其他情况下不如强转方便