From eb807fae94d9f287c3e20af3ef0e34b3ad3f6abe Mon Sep 17 00:00:00 2001 From: warden Date: Mon, 19 Jun 2023 15:31:45 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89json=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/json/utils/JacksonJsonUtil.java | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 ruoyi-common/ruoyi-common-json/src/main/java/org/dromara/common/json/utils/JacksonJsonUtil.java diff --git a/ruoyi-common/ruoyi-common-json/src/main/java/org/dromara/common/json/utils/JacksonJsonUtil.java b/ruoyi-common/ruoyi-common-json/src/main/java/org/dromara/common/json/utils/JacksonJsonUtil.java new file mode 100644 index 000000000..5e80ac88b --- /dev/null +++ b/ruoyi-common/ruoyi-common-json/src/main/java/org/dromara/common/json/utils/JacksonJsonUtil.java @@ -0,0 +1,128 @@ +package org.dromara.common.json.utils; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; + +@Slf4j +public class JacksonJsonUtil { + private static ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + static { + //对象的所有字段全部列入 + OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.ALWAYS); + + //取消默认转换timesstamps(时间戳)形式 + OBJECT_MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + + //忽略空bean转json错误 + OBJECT_MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + //忽略在json字符串中存在,在java类中不存在字段,防止错误 + OBJECT_MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + } + + public static String objToJson(T obj) { + if (obj == null) { + return null; + } + + try { + return obj instanceof String ? (String)obj : OBJECT_MAPPER.writeValueAsString(obj); + } catch (Exception e) { + log.error("obj To json is error" , e); + return null; + } + } + + /** + * 返回格式化好的json串 + * @param obj + * @param + * @return + */ + public static String objToJsonPretty(T obj) { + if (obj == null) { + return null; + } + + try { + return obj instanceof String ? (String)obj : OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(obj); + } catch (Exception e) { + log.warn("obj To json pretty is error", e); + return null; + } + } + + public static T json2Object(String json, Class clazz) { + if (StringUtils.isEmpty(json) || clazz == null) { + return null; + } + + try { + return clazz.equals(String.class) ? (T)json : OBJECT_MAPPER.readValue(json, clazz); + } catch (Exception e) { + log.warn("json To obj is error", e); + return null; + } + } + + /** + * 通过 TypeReference 处理List这类多泛型问题 + * @param json + * @param typeReference + * @param + * @return + */ + public static T json2Object(String json, TypeReference typeReference) { + if (StringUtils.isEmpty(json) || typeReference == null) { + return null; + } + + try { + return (T)(typeReference.getType().equals(String.class) ? json : OBJECT_MAPPER.readValue(json, typeReference)); + } catch (Exception e) { + log.warn("json To obj is error", e); + return null; + } + } + + /** + * 通过jackson 的javatype 来处理多泛型的转换 + * @param json + * @param collectionClazz + * @param elements + * @param + * @return + */ + public static T json2Object(String json, Class collectionClazz, Class...elements) { + JavaType javaType = OBJECT_MAPPER.getTypeFactory().constructParametricType(collectionClazz, elements); + + try { + return OBJECT_MAPPER.readValue(json, javaType); + } catch (Exception e) { + log.warn("json To obj is error", e); + return null; + } + } + + + public static Map toLinkedHashMap(String jsonStr) { + + Map data = null; + try { + data = OBJECT_MAPPER.readValue(jsonStr, new TypeReference>() {}); + } catch (IOException e) { + e.printStackTrace(); + } + return data; + } +}