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, JsonDeserializationContext 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()));