Gson对LocalDateTime的转换

时间:2022-06-01 12:56:25

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