All Downloads are FREE. Search and download functionalities are using the official Maven repository.

top.zeimao77.product.util.JsonBeanUtil Maven / Gradle / Ivy

package top.zeimao77.product.util;

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class JsonBeanUtil {

    private static Logger logger = LoggerFactory.getLogger(JsonBeanUtil.class);
    public static final JsonBeanUtil DEFAULT = new JsonBeanUtil();

    public ObjectMapper objectMapper;

    public JsonBeanUtil(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }

    private JsonBeanUtil(){
        objectMapper = new ObjectMapper();
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(LocalDateTimeUtil.STANDARDDATETIMEFORMATTER));
        javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(LocalDateTimeUtil.STANDARDDATETIMEFORMATTER));
        javaTimeModule.addSerializer(LocalDate.class,new LocalDateSerializer(LocalDateTimeUtil.STANDARDDATEFORMATTER));
        javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(LocalDateTimeUtil.STANDARDDATEFORMATTER));
        javaTimeModule.addSerializer(LocalTime.class,new LocalTimeSerializer(LocalDateTimeUtil.STANDARDTIMEFORMATTER));
        javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(LocalDateTimeUtil.STANDARDTIMEFORMATTER));
        javaTimeModule.addSerializer(StringOptional.class,new JsonSerializer() {
            @Override
            public void serialize(StringOptional value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
                gen.writeString(value.isBlack() ? null : value.get());
            }
        });
        javaTimeModule.addDeserializer(StringOptional.class,new JsonDeserializer() {
            @Override
            public StringOptional deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
                if (p.hasToken(JsonToken.VALUE_STRING)) {
                    return new StringOptional(p.getText());
                }
                return StringOptional.empty();
            }
        });
        objectMapper.registerModule(javaTimeModule);
    }

    /**
     * 对象转JSON字符串
     * @param obj 对象
     * @return JSON字符串
     */
    public String toJsonString(Object obj) {
        String s = null;
        try {
            s = objectMapper.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            logger.error("BEAN转换JSON出错",e);
        }
        return s;
    }

    /**
     * JSON字符串转对象
     * @param str JSON字符串
     * @param clazz 目标类
     * @param  目标对象类型
     * @return 转换结果
     */
    public  T toBean(String str,Class clazz) {
        T t = null;
        try {
            t = objectMapper.readValue(str,clazz);
        } catch (JsonProcessingException e) {
            logger.error("JSON转换BEAN出错",e);
        }
        return t;
    }

    public String read(String json,String path) {
        String result = null;
        try {
            JsonNode jsonNode = objectMapper.readTree(json);
            result = jsonNode.findPath(path).asText();
        } catch (JsonProcessingException e) {
            logger.error("JSON读取出错",e);
        }
        return result;
    }

    public ObjectMapper getObjectMapper() {
        return objectMapper;
    }




}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy