Jackson通用工具類
阿新 • • 發佈:2020-09-15
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.11.1'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.1'
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import java.io.IOException; import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; @Slf4j public class Json { private static ObjectMapper MAPPER; static { JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(ZonedDateTime.class, new JsonSerializer<ZonedDateTime>() { @Override public void serialize(ZonedDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeNumber(value.toInstant().toEpochMilli()); } }); javaTimeModule.addDeserializer(ZonedDateTime.class, new JsonDeserializer<ZonedDateTime>() { @Override public ZonedDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { return ZonedDateTime.ofInstant(Instant.ofEpochMilli(p.readValueAs(Long.class)), ZoneId.systemDefault()); } }); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); objectMapper.registerModule(javaTimeModule); MAPPER = objectMapper; } public static ObjectMapper getMapper() { return MAPPER; } @SneakyThrows public static String toJson(Object object) { return MAPPER.writeValueAsString(object); } @SneakyThrows public static <T> T toObject(String json, Class<T> clazz) { return MAPPER.readValue(json, clazz); } public static <T> T toObject(Object object, Class<T> clazz) { return MAPPER.convertValue(object, clazz); } @SneakyThrows public static <T> T toObject(String json, TypeReference<T> type) { return MAPPER.readValue(json, type); } public static <T> T toObject(Object object, TypeReference<T> type) { return MAPPER.convertValue(object, type); } }