gson builder
public class GsonUtil<T> { public List<T> fromJson(String value, Class<T> valueClass) { List<T> list = new ArrayList<>(); JsonArray jsonArray = new JsonParser().parse(value).getAsJsonArray(); Gson gson = new Gson(); for (JsonElement jsonElement : jsonArray) { list.add(gson.fromJson(jsonElement, valueClass)); } return list; } public static Date toSystemTimezone(Date par) { if (par == null){ return null; } return Date.from(par.toInstant().atZone(ZoneId.systemDefault()).toInstant()); } private static final String DEFAULT_DATE_TIME_FORMATTER = "yyyy-MM-dd HH:mm:ss"; private static final String DEFAULT_DATE_FORMATTER = "yyyy-MM-dd"; private static final String DEFAULT_TIME_FORMATTER = "HH:mm:ss"; public static final Gson gson = new GsonBuilder() .serializeNulls() .registerTypeAdapter(LocalDateTime.class, (JsonSerializer<LocalDateTime>) (localDateTime, typeOfSrc, context) -> { if (Objects.isNull(localDateTime)) { return new JsonPrimitive(""); } return new JsonPrimitive(localDateTime.format(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER))); }) .registerTypeAdapter(LocalDateTime.class, (JsonDeserializer<LocalDateTime>) (json1, typeOfT, context) -> { String string = json1.getAsJsonPrimitive().getAsString(); if (Strings.isNullOrEmpty(string)) { return null; } try { return LocalDateTime.parse(string, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER)); }catch (RuntimeException exception){ return LocalDateTime.parse(string, DateTimeFormatter.ISO_DATE_TIME); } }) .registerTypeAdapter(LocalDate.class, (JsonSerializer<LocalDate>) (localDate, type, jsonSerializationContext) -> { if (Objects.isNull(localDate)) { return new JsonPrimitive(""); } return new JsonPrimitive(localDate.format(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMATTER))); }) .registerTypeAdapter(LocalDate.class, (JsonDeserializer<LocalDate>) (json, typeOfT, context) -> { String string = json.getAsJsonPrimitive().getAsString(); if (Strings.isNullOrEmpty(string)) { return null; } return LocalDate.parse(string, DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMATTER)); }) .registerTypeAdapter(LocalTime.class, (JsonSerializer<LocalTime>) (localTime, type, jsonSerializationContext) -> { if (Objects.isNull(localTime)) { return new JsonPrimitive(""); } return new JsonPrimitive(localTime.format(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMATTER))); }) .registerTypeAdapter(LocalTime.class, (JsonDeserializer<LocalTime>) (json, typeOfT, context) -> { String string = json.getAsJsonPrimitive().getAsString(); if (Strings.isNullOrEmpty(string)) { return null; } return LocalTime.parse(string, DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMATTER)); }) .registerTypeAdapter(Date.class, (JsonSerializer<Date>) (date, type, jsonSerializationContext) -> { if (Objects.isNull(date)) { return new JsonPrimitive(""); } SimpleDateFormat fmt = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMATTER); //SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); //fmt.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); return new JsonPrimitive(fmt.format(date)); }) .registerTypeAdapter(Date.class, (JsonDeserializer<Date>) (json, typeOfT, context) -> { String string = json.getAsJsonPrimitive().getAsString(); if (Strings.isNullOrEmpty(string)) { return null; } try { Date res = null; if (NumberUtil.isLong(string)){ res = Convert.toDate(Convert.toLong(string)); }else{ res = Convert.toDate(string); } return toSystemTimezone(res); } catch (Exception e) { e.printStackTrace(); return null; } }) .create(); }
posted on 2023-07-05 15:58 jonney_wang 阅读(24) 评论(0) 编辑 收藏 举报