Xstream解析XML报文中携带的参数类型,以及json无法携带参数类型的问题

业务场景:ApplyXMLServlet接口作用是接收xml报文,转为实体类,处理之后再转为XML报文发送给其他系统。现增加了一个AplyJSONServlet,接收json,转为实体类,处理之后再转为XML报文发送给其他系统。

问题描述:XML接口接收的报文中有携带数据类型声明的节点,如下所示:

 <birthday class="sql-date">1983-04-25</birthday>

XStream可以识别这个class,在转型时可以将此节点转为java.sql.Date类型,且在XStream的源码中看到,只能识别以下3种class声明:

if(jvm.supportsSQL())
        {
            alias("sql-timestamp", jvm.loadClass("java.sql.Timestamp"));
            alias("sql-time", jvm.loadClass("java.sql.Time"));
            alias("sql-date", jvm.loadClass("java.sql.Date"));
        }

在XML和实体类互相转化时,XStream可以对这三个java.sql下的日期类型进行声明和转化,而不是默认的java.util.Date。

 而由于参数类型在JSON中无法携带、fastjson也无法解析,所以会在JSON转实体类时将日期转为java.util.Date类型,实体类再次转XML时,就不会携带数据类型声明。

问题解决:问题在于Xstream只对java.sql包下的日期类型生成类型声明,所以解决方案有以下4种(有几个只是我的想法,由于难度较大难以实现):

1.更改实体类代码,将

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值