Java中web服务序列化日期
我通过web服务传递一些对象,其中一些包含java。sql。日期因为Date没有空构造函数,所以它不想序列化
问题的第一部分很简单:在客户和服务之间传递日期的最佳方式是什么
第二部分有点棘手:一旦我决定如何传递日期,我显然可以声明date transient,并使一些包装类以字符串或其他形式传递日期,但如何将相同的解决方案尽可能透明地应用于包含date的几个类
(我有一种预感,DynamicProxy thingy可能是一种解决方案,但阅读Sun网站上的文档并没有太大帮助,所以如果它真的是朝着这个方向发展的,请澄清一下。)
编辑:对不起,我问错了问题(我和同事之间的一些误解,什么是真正的问题)。由于反序列化而出现问题。所以一旦我有了xml格式的date,它就会尝试将自己反序列化为GregoriaCalendar。问题的另一部分仍然存在:在不为10个不同的类制作10个不同的包装器的情况下,接收某些内容(长时间戳或GregoriaCalendar)并将其转换为sql日期的最佳方式是什么。我正在使用NetBeans生成代码和wsdl
# 1 楼答案
我已经研究了java的实现。sql。日期和我所看到的java。sql。Date可以序列化为java的扩展。util。约会
# 2 楼答案
乔达时间
Date类有一个笨重的API。更好的实现是Joda-Time
ISO 8601
Joda Time还允许您以ISO 8601标准格式(yyyy-mm-ddTHH:mm:SS.SSS)转换日期。在将日期从服务器移动到客户端时,使用此标准的优点是以可读的格式包含完整的日期。例如,当您使用JAXB时,日期的XML表示也是这个ISO标准。(参见XMLGregorianCalendar类)
# 3 楼答案
为了回答问题的第一部分,我建议使用iso 8601格式的字符串(这是日期编码的标准)
对于第二部分,我不确定为什么需要代理类?或者为什么要扩展date类来支持这一点。您的web服务是否会知道某个字段是日期,并将其从日期转换为字符串并返回?我需要更多的信息
# 4 楼答案
java有一个警告。sql。最近,Date让我感到困扰的是,它不存储时间部分(小时、分钟、秒等),只存储日期部分。如果你想要完整的时间戳,你必须使用java。util。日期或java。sql。时间戳