美文网首页
java8LocalDateTime,LocalDate,Loc

java8LocalDateTime,LocalDate,Loc

作者: 茶还是咖啡 | 来源:发表于2020-12-10 11:04 被阅读0次

Gson

public class GsonHelper {

    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";

    private static final Gson GSON;

    private static final JsonParser JSON_PARSER = new JsonParser();

    private static final Gson PRETTY_GSON;

    /*
     * 增加java8 时间处理类序列化反序列化
     * @since 1.2.5
     */
    static {
        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;
                    }
                    return LocalDateTime.parse(string, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER));
                })
                .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));
                })
                .create();
        PRETTY_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;
                    }
                    return LocalDateTime.parse(string, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER));
                })
                .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));
                })
                .setPrettyPrinting()
                .create();
    }

    /**
     * Json美化输出工具
     *
     * @param json json string
     * @return beauty json string
     */
    public static String toPrettyFormat(String json) {
        JsonElement jsonElement = JSON_PARSER.parse(json);
        return PRETTY_GSON.toJson(jsonElement);
    }

    /**
     * 美化json
     *
     * @param object obj
     * @return beauty json string
     */
    public static String toPrettyFormat(Object object) {
        return toPrettyFormat(object2Json(object));
    }

    /**
     * Json转换成对象
     *
     * @param json json string
     * @param <T>  对象类型
     * @return T
     */
    public static <T> T json2Object(String json, Class<T> t) {
        return GSON.fromJson(json, t);
    }

    /**
     * Json转换成对象
     * 该方式适用于泛型内包含泛型,如想转换的返回值为:User<String>
     * 使用方式
     * <code>
     * Type type = new TypeToken<User<String>>(){}.getType();
     * User<String> user = JsonHelper.json2Object(json,type);
     * </code>
     *
     * @param json json
     * @param type type
     * @param <T>  T
     * @return T
     */
    public static <T> T json2Object(String json, Type type) {
        return GSON.fromJson(json, type);
    }

    /**
     * 对象转换成Json字符串
     * json分为对象和数组两种类型,需要分别处理
     *
     * @param object obj
     * @return json string
     */
    public static String object2Json(Object object) {
        return GSON.toJson(object);
    }

    /**
     * json转换成JsonElement
     *
     * @param json jsonStr
     * @return {@link JsonElement}
     */
    public static JsonElement json2JsonElement(String json) {
        return JSON_PARSER.parse(json);
    }
}

Jackson

@Slf4j
public class JacksonHelper {

    private static final ObjectMapper objectMapper = new ObjectMapper();

    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";

    static {
        @Slf4j
public class JacksonHelper {

    private static final ObjectMapper objectMapper = new ObjectMapper();

    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";

    static {
        objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
        objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
        objectMapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, true);
        objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
        objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
//        objectMapper.registerModule(new JavaTimeModule());
        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object value, JsonGenerator jg,
                                  SerializerProvider sp) throws IOException,
                    JsonProcessingException {
                jg.writeString("");
            }
        });
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addDeserializer(LocalDateTime.class, new JsonDeserializer<LocalDateTime>() {
            @Override
            public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
                    throws IOException, JsonProcessingException {
                String value = jsonParser.getValueAsString();
                if (Strings.isNullOrEmpty(value)) {
                    return null;
                }
                return LocalDateTime.parse(jsonParser.getValueAsString(), DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER));
            }
        });
        javaTimeModule.addSerializer(LocalDateTime.class, new JsonSerializer<LocalDateTime>() {
            @Override
            public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                if (Objects.isNull(localDateTime)) {
                    jsonGenerator.writeString("");
                }
                jsonGenerator.writeString(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER).format(localDateTime));
            }
        });
        javaTimeModule.addDeserializer(LocalDate.class, new JsonDeserializer<LocalDate>() {
            @Override
            public LocalDate deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
                    throws IOException, JsonProcessingException {
                if(Strings.isNullOrEmpty(jsonParser.getValueAsString())){
                    return null;
                }
                return LocalDate.parse(jsonParser.getValueAsString(), DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMATTER));
            }
        });
        javaTimeModule.addSerializer(LocalDate.class, new JsonSerializer<LocalDate>() {
            @Override
            public void serialize(LocalDate localDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                if (Objects.isNull(localDate)) {
                    jsonGenerator.writeString("");
                }else {
                    jsonGenerator.writeString(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMATTER).format(localDate));
                }
            }
        });
        javaTimeModule.addDeserializer(LocalTime.class, new JsonDeserializer<LocalTime>() {
            @Override
            public LocalTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
                    throws IOException, JsonProcessingException {
                if(Strings.isNullOrEmpty(jsonParser.getValueAsString())){
                    return null;
                }
                return LocalTime.parse(jsonParser.getValueAsString(), DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMATTER));
            }
        });
        javaTimeModule.addSerializer(LocalTime.class, new JsonSerializer<LocalTime>() {
            @Override
            public void serialize(LocalTime localTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                if(Objects.isNull(localTime)){
                    jsonGenerator.writeString("");
                }
                jsonGenerator.writeString(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMATTER).format(localTime));
            }
        });
        objectMapper.registerModules(javaTimeModule);
    }

    public static String obj2Json(Object obj) throws IOException {
        return objectMapper.writeValueAsString(obj);
    }

    public static <T> T json2Obj(String json, Class<T> clazz) throws IOException {
        return objectMapper.readValue(json, clazz);
    }

    /**
     * 可以把Json字符串转换成List
     */
    public static <T> T parseObject(String json, TypeReference<T> typeReference) {
        try {
            return (T) objectMapper.readValue(json, typeReference);
        } catch (JsonParseException e) {
            log.error("parseObject(String, TypeReference<T>) JsonParseException", e);
        } catch (JsonMappingException e) {
            log.error("parseObject(String, TypeReference<T>) JsonMappingException", e);
        } catch (IOException e) {
            log.error("parseObject(String, TypeReference<T>)", e);
        }
        return null;
    }


    public static JsonNode readRootNode(String json) {
        return readAnyNode(json, null);
    }

    /**
     * 根据json key 获取任意层级的jsonNode
     */
    public static JsonNode readAnyNode(String json, String fieldName) {
        try {
            JsonNode rootNode = objectMapper.readTree(json);
            if (Strings.isNullOrEmpty(fieldName)) {
                return rootNode;
            }
            return rootNode.findValue(fieldName);
        } catch (IOException e) {
            log.error("readNode(String json,String fieldName)", e);
        }
        return null;
    }


    //创建jsonNode
    public static ObjectNode createObjectNode() {
        return objectMapper.createObjectNode();
    }

    /**
     * 格式化输出json
     */
    public static <T> String console(T t) {
        String json = "";
        try {
            json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(t);
        } catch (JsonGenerationException e) {
            log.error("console(T t) JsonGenerationException", e);
        } catch (JsonMappingException e) {
            log.error("console(T t) JsonMappingException", e);
        } catch (IOException e) {
            log.error("console(T t)", e);
        }
        return json;
    }
}

    }

    public static String obj2Json(Object obj) throws IOException {
        return objectMapper.writeValueAsString(obj);
    }

    public static <T> T json2Obj(String json, Class<T> clazz) throws IOException {
        return objectMapper.readValue(json, clazz);
    }

    /**
     * 可以把Json字符串转换成List
     */
    public static <T> T parseObject(String json, TypeReference<T> typeReference) {
        try {
            return (T) objectMapper.readValue(json, typeReference);
        } catch (JsonParseException e) {
            log.error("parseObject(String, TypeReference<T>) JsonParseException", e);
        } catch (JsonMappingException e) {
            log.error("parseObject(String, TypeReference<T>) JsonMappingException", e);
        } catch (IOException e) {
            log.error("parseObject(String, TypeReference<T>)", e);
        }
        return null;
    }


    public static JsonNode readRootNode(String json) {
        return readAnyNode(json, null);
    }

    /**
     * 根据json key 获取任意层级的jsonNode
     */
    public static JsonNode readAnyNode(String json, String fieldName) {
        try {
            JsonNode rootNode = objectMapper.readTree(json);
            if (StringUtils.isBlank(fieldName)) {
                return rootNode;
            }
            return rootNode.findValue(fieldName);
        } catch (IOException e) {
            log.error("readNode(String json,String fieldName)", e);
        }
        return null;
    }


    //创建jsonNode
    public static ObjectNode createObjectNode() {
        return objectMapper.createObjectNode();
    }

    /**
     * 格式化输出json
     */
    public static <T> String console(T t) {
        String json = "";
        try {
            json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(t);
        } catch (JsonGenerationException e) {
            log.error("console(T t) JsonGenerationException", e);
        } catch (JsonMappingException e) {
            log.error("console(T t) JsonMappingException", e);
        } catch (IOException e) {
            log.error("console(T t)", e);
        }
        return json;
    }
}

相关文章

网友评论

      本文标题:java8LocalDateTime,LocalDate,Loc

      本文链接:https://www.haomeiwen.com/subject/uymkgktx.html