直接上反例:
Date date = JSON.parseObject("\"0100-01-27 11:22:00.000\"", Date.class);
运行上面这行代码会报错,错误信息如下:
Caused by: java.lang.NumberFormatException: For input string: "0100-01-27 11:22:00.000" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Long.parseLong(Long.java:589) at java.lang.Long.parseLong(Long.java:631) at com.alibaba.fastjson.serializer.DateCodec.cast(DateCodec.java:244) at com.alibaba.fastjson.parser.deserializer.AbstractDateDeserializer.deserialze(AbstractDateDeserializer.java:138) at com.alibaba.fastjson.parser.deserializer.AbstractDateDeserializer.deserialze(AbstractDateDeserializer.java:15) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:661)
但是,将年份改成大于等于1000或者去掉秒后面的毫秒数,可以成功反序列化,如:
Date date = JSON.parseObject("\"1000-01-27 11:22:00.000\"", Date.class);
Date date = JSON.parseObject("\"0100-01-27 11:22:00\"", Date.class);
对于格式为yyyy-MM-dd hh:mm:ss.SSS的日期, 如果年份小于1000,为什么会反序列化失败呢? 劳烦帮忙解答,提前感谢!
目前有个临时的解决方案: 覆盖com.alibaba.fastjson.parser.deserializer.AbstractDateDeserializer中的cast方法,使用SimpleDateFormat来parse字符串。
如果有更合适的解决办法,欢迎留言。