业务场景: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.更改实体类代码,将