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编辑  收藏  举报

导航