发布于2020-11-19 20:27 阅读(1693) 评论(0) 点赞(10) 收藏(0)
今天在用Gson进行反序列化json为java bean时,报Invalid time zone indicator ' '。详细报错日志如下:
- Caused by: com.google.gson.JsonSyntaxException: 1534467411000
- at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:74)
- at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:59)
- at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:41)
- at com.google.gson.internal.bind.TypeAdapters$26$1.read(TypeAdapters.java:598)
- at com.google.gson.internal.bind.TypeAdapters$26$1.read(TypeAdapters.java:596)
- at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
- at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
- at com.google.gson.Gson.fromJson(Gson.java:887)
- at com.google.gson.Gson.fromJson(Gson.java:852)
- at com.google.gson.Gson.fromJson(Gson.java:801)
- at com.google.gson.Gson.fromJson(Gson.java:773)
- Caused by: java.text.ParseException: Failed to parse date ["1534467411000']: Invalid time zone indicator '0'
- at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274)
- at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:72)
- ... 19 more
- Caused by: java.lang.IndexOutOfBoundsException: Invalid time zone indicator '6'
- at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:245)
- ... 20 more
实际上是因为Gson反序列化时间long值转为Date类型报错,即Gson无法解析位数太长的时间格式。这个详细分析可参看:https://blog.csdn.net/uniquewonderq/article/details/103037400
(1)解决方法1
这个报错解决方案在Gson上有相关的issue,可参看https://github.com/google/gson/issues/1297。即不使用 new Gson() 创建对象,并指定dateFormat类型。
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create()
(2)解决方法2
实际发现这种方式也有可能不能解决该报错。推荐使用下面的方式,采用GsonBuilder 注册Date类型。
- GsonBuilder builder = new GsonBuilder();
- builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
- public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
- return new Date(json.getAsJsonPrimitive().getAsLong());
- }
- });
-
- Gson gson = builder.create();
大家可根据实际情况选择两种解决方法。
原文链接:https://blog.csdn.net/znb769525443/article/details/109751708
作者:java王侯
链接:http://www.javaheidong.com/blog/article/894/5a9b7fb53ed96955b6df/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!