• Gson处理时间类型数据


    Java与mysql中时间类型对应关系

    mysql时间类型 Java时间类型
    date java.sql.Date
    datetime java.sql.Timestamp
    timestamp java.sql.Timestamp
    time java.sql.Time
    year java.sql.Date

    使用List<Map<String, Object>> map = getJdbcSupport().getJt().queryForList(...)从数据库中查询出数据后,需要转成JSON字符串。由于数据库(mysql)字段中有date和datetime类型的时间数据,直接使用gson.toJson(map)解析时时间数据不能正常解析,可以使用如下类型适配进行处理

    /**
         * gson使用toJson时处理数据库中的datetime类型的时间数据
         * 
         * @author jinjinwang <br>
         *         created on Jun 9, 2013 11:47:05 AM
         */
        private class TimestampTypeAdapter implements JsonSerializer<Timestamp>, JsonDeserializer<Timestamp> {
            private final DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
            public JsonElement serialize(Timestamp src, Type arg1, JsonSerializationContext arg2) {
                String dateFormatAsString = format.format(new Date(src.getTime()));
                return new JsonPrimitive(dateFormatAsString);
            }
    
            public Timestamp deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
                if (!(json instanceof JsonPrimitive)) {
                    throw new JsonParseException("The date should be a string value");
                }
                try {
                    Date date = format.parse(json.getAsString());
                    return new Timestamp(date.getTime());
                } catch (ParseException e) {
                    throw new JsonParseException(e);
                }
            }
        }
    
        /**
         * gson使用toJson时处理数据库中的date类型的时间数据
         * 
         * @author jinjinwang <br>
         *         created on Jun 9, 2013 11:48:29 AM
         */
        private class SQLDateTypeAdapter implements JsonSerializer<java.sql.Date> {
            private final DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
            @Override
            public JsonElement serialize(java.sql.Date src, Type arg1, JsonSerializationContext arg2) {
                String dateFormatAsString = format.format(new java.sql.Date(src.getTime()));
                return new JsonPrimitive(dateFormatAsString);
            }
        }

    解析时使用GsonBuilder创建Gson对象,并指定类型适配

    Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").registerTypeAdapter(Timestamp.class, new TimestampTypeAdapter()).registerTypeAdapter(java.sql.Date.class, new SQLDateTypeAdapter()).create();
    return gson.toJson(map);

    解析json字符串时可先用String接收再进行处理

    List<Map<String, Object>> listMap = StringUtils.getGson().fromJson(jsonResult, new TypeToken<List<Map<String, String>>>() {}.getType());
  • 相关阅读:
    关于等价类测试的简单实践 20150322
    对软件测试的理解 20150314
    pthread_wrap.h
    libuv 错误号UV_ECANCELED 的处理
    简单的后台日志组件
    Windows NTService 后台框架封装
    检查程序进程是否存在/强制杀掉程序进程
    析构函数结束线程测试
    移动天线
    猜数字游戏的Java小程序
  • 原文地址:https://www.cnblogs.com/jimor/p/3128780.html
Copyright © 2020-2023  润新知