[alibaba/fastjson]请问 20181229162849000+0800 这样的时间解析错误 怎么处理

2025-10-31 780 views
7

https://github.com/alibaba/fastjson/blob/72a2df2a64c2c09c4fdb96563362690449711b6b/src/main/java/com/alibaba/fastjson/util/TypeUtils.java#L342 这里应该是不能进判断的 这个时间格式是 阿里开放平台返回的时间格式 直接用 yyyyMMddHHmmssSSSZ 是可以解析成功的 但是FastJSON这里没有做处理

回答

3

异常为 com.alibaba.fastjson.JSONException: For input string: \"20181229162849000+0800\" 具体处理代码在 TypeUtils.java:307 因为该字符串不包含 - 所以进入了数字解析流程 导致 Long 解析错误

0

补充一下 是 jsonObject.getJSONArray("xxx").toJavaList() 触发的 单独的解析好像是可以的 单独也不行

List<Order> result = new ArrayList<>(array.size());
array.forEach(o -> result.add(((JSONObject) o).toJavaObject(Order.class)));
return result;
3

通过JSONField配置format

8

@wenshao 我配置过format了 但是你看上面的源码 没有进入format的格式化判断 因为字符串不包含 - 这个符号 然后进入了 Long.parseLong 的流程 结果就是 Caused by: java.lang.NumberFormatException: For input string: "20181229162849000+0800"

6

问题重现并修复,谢谢反馈

1

问题已修复,请用新版本 https://github.com/alibaba/fastjson/releases/tag/1.2.55