博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gson处理Date类型的属性
阅读量:7221 次
发布时间:2019-06-29

本文共 1576 字,大约阅读时间需要 5 分钟。

hot3.png

        用Gson做对象和Json字符串相互转换很方便,但要把包含java.util.Date类型属性的对象转换成Json字符串,如下面的代码:

Gson gson = new Gson();String _p = "{'name':'Json','age':'0','birthday':'2016-01-16'}";Person person = gson.fromJson(_p, Person.class);

        有时候会抛如下异常:

        com.google.gson.JsonSyntaxException: 2016-01-16	at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:81)	at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:66)	at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:41)	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)	at com.google.gson.Gson.fromJson(Gson.java:810)	at com.google.gson.Gson.fromJson(Gson.java:775)	at com.google.gson.Gson.fromJson(Gson.java:724)	at com.google.gson.Gson.fromJson(Gson.java:696)

        原因是Gson会默认会先按本地的日期格式来格式化日期,如果不成功,则再按照英文日期格式格式化日期,如果不成功则用ISO8601Utils格式化日期,如果再不成功就抛出上述异常,Gson处理日期属性的相关代码如下:

private synchronized Date deserializeToDate(String json) {    try {        return localFormat.parse(json);    } catch (ParseException ignored) {}    try {        return enUsFormat.parse(json);    } catch (ParseException ignored) {}    try {        return ISO8601Utils.parse(json, new ParsePosition(0));    } catch (ParseException e) {        throw new JsonSyntaxException(json, e);    }}

        所以创建Gson时需要制定日期转换格式:

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();

        然后就没问题了

转载于:https://my.oschina.net/u/1404252/blog/603482

你可能感兴趣的文章
iOS开发UI篇—程序启动原理和UIApplication
查看>>
MUI 里js动态添加数字输入框后,增加、减少按钮无效
查看>>
python pip 更换国内安装源(windows)
查看>>
结对编程2后篇
查看>>
oracle exp 和 imp 数据和表结构互相独立导出导入
查看>>
iphone-common-codes-ccteam源代码 CCNSPredicate.m
查看>>
这次项目中应该注意的问题和应该保持的好习惯
查看>>
python-数据结构化与保存
查看>>
LeetCode - 551. Student Attendance Record I
查看>>
Java用户线程和守护线程
查看>>
ClassLoader类加载机制&&JVM内存管理
查看>>
Caml语句 查询分配给当前用户及当前组
查看>>
记一次源码分析
查看>>
php版本引起的const问题
查看>>
js实现60s倒计时效果
查看>>
【POJ 2176】Folding
查看>>
redis的过期策略以及内存淘汰机制
查看>>
阿牛的EOF牛肉串
查看>>
随笔2013/2/13
查看>>
笨办法32循环和列表
查看>>