Google GSON GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")不能格式化Data
在项目中遇到问题,数据库中保存的时间类型为datetime(MySQL),实体类中对应数据类型为java.sql.Date,利用GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")构造gson对象向客户端输出json字符串。忽一日客户端接收到的日期字段值为中文时间,大惊,彻查,疑为实体类中的数据类型不适合,导致Hibernate中的timestamp部分信息丢失,尝试着将实体类中类型改为java.sql.Timestamp,再试,成功。
另搜索到网上一哥们的其他解法,如下:
- public
class TimestampTypeAdapter implements JsonSerializer<Timestamp>, JsonDeserializer<Timestamp>{ -
private final DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); -
public JsonElement serialize(Timestamp ts, Type t, JsonSerializationContext jsc) { -
String dfString = format.format(new Date(ts.getTime())); -
return new JsonPrimitive(dfString); -
} -
public Timestamp deserialize(JsonElement json, Type t, JsonDeserializationConte xt jsc) 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); -
} -
} -
}
应用类型适配器
- GsonBuilder
gsonBuilder = new GsonBuilder(); - gsonBuilder.setDateFormat("yyyy-MM-dd
hh:mm:ss"); - gsonBuilder.registerTypeAdapter(Timestamp.class,new
TimestampTypeAdapter()); - Gson
GSON = gsonBuilder.create(); - String
json = GSON.toJson(new Timestamp((new Date()).getTime()));