zoukankan      html  css  js  c++  java
  • 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());
  • 相关阅读:
    【转】大数据求职者说
    【转】大数据东西辣么多,我该如何给自己一个清晰的定位呢?
    【转】大数据工程师需要学习哪些?
    【English】 Re-pick up English for learning big data (not updated regularly)
    【spark】spark应用(分布式估算圆周率+基于Spark MLlib的贷款风险预测)
    【idea】scala&sbt+idea+spark使用过程中问题汇总(不定期更新)
    【idea】scala&sbt+idea安装配置与测试
    spring boot热部署
    网段判断
    【转】python测试框架--doctest
  • 原文地址:https://www.cnblogs.com/jimor/p/3128780.html
Copyright © 2011-2022 走看看