import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; 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.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import org.apache.commons.lang3.StringUtils; import org.springframework.util.SerializationUtils; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * Json序列化工具类 * */ public class JsonUtil { private static ObjectMapper objectMapper = new ObjectMapper(); static { // 对象的所有字段全部列入 objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS); // 取消默认的将date转换为timestamps objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); // 忽略将空Bean转Json的错误 objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); // 同意时间格式 objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); // 忽略在json字符串中存在但是在对象属性中不存在的情况 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); objectMapper.registerModule(javaTimeModule); } /** * 对象转json * @param obj * @return */ public static <T> String objToString(T obj) { if (obj == null) { return null; } try { return obj instanceof String ? (String)obj : objectMapper.writeValueAsString(obj); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 对象转为格式化的json * @param obj * @return */ public static <T> String objToStringPretty(T obj) { if (obj == null) { return null; } try { return obj instanceof String ? (String)obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj); } catch (Exception e) { e.printStackTrace(); return null; } } public static <T> T stringToObj(String str,Class<T> clazz){ if(StringUtils.isEmpty(str) || clazz==null){ return null; } try { return clazz.equals(String.class) ? (T)str : objectMapper.readValue(str, clazz); } catch (Exception e) { e.printStackTrace(); return null; } } public static <T> T stringToObj(String str, TypeReference<T> typeReference){ if(StringUtils.isEmpty(str) || typeReference==null){ return null; } try { return (T)(typeReference.getType().equals(String.class)? str : objectMapper.readValue(str, typeReference)); } catch (Exception e) { e.printStackTrace(); return null; } } public static <T> T stringToObj(String str,Class<?> collectionClass,Class<?>... elementClasses){ JavaType javaType=objectMapper.getTypeFactory().constructParametricType(collectionClass, elementClasses); try { return objectMapper.readValue(str, javaType); } catch (Exception e) { e.printStackTrace(); return null; } } }
Json序列化工具
最新推荐文章于 2024-10-10 22:04:37 发布