Gson对LocalDatetime的转换
Gson普通对象序列化和反序列化
MyObject myObject = new Gson().fromJson(jsonStr, MyObject.class);
String jsonStr = new Gson().toJson(myObject);
使用GsonBuilder自定义日期格式:
如果是对Date, Timestamp 和java.sql.Date做序列化和反序列化,可以使用GsonBuilder的setDateFormat设置。
示例:
Gson gson = new GsonBuilder().setDateFormat("yyyy/MM/dd HH:mm:ss").create();
使用GsonBuilder自定义LocalDateTime的转换
Gson内置是没有对LocalDateTime和LocalDate做转换的,需要自定义适配器,并使用GsonBuilder注册。
new GsonBuilder()
//LocalDateTime序列化适配器
.registerTypeAdapter(LocalDateTime.class, (JsonSerializer<LocalDateTime>) (src, typeOfSrc, context) -> new JsonPrimitive(src.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
//LocalDate序列化适配器
.registerTypeAdapter(LocalDate.class, (JsonSerializer<LocalDate>) (src, typeOfSrc, context) -> new JsonPrimitive(src.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))))
//LocalDateTime反序列化适配器
.registerTypeAdapter(LocalDateTime.class, (JsonDeserializer<LocalDateTime>) (json, type, jsonDeserializationContext) -> {
String datetime = json.getAsJsonPrimitive().getAsString();
return LocalDateTime.parse(datetime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//LocalDate反序列化适配器
}).registerTypeAdapter(LocalDate.class, (JsonDeserializer<LocalDate>) (json, type, jsonDeserializationContext) -> {
String datetime = json.getAsJsonPrimitive().getAsString();
return LocalDate.parse(datetime, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}).create();