|
@@ -1,167 +0,0 @@
|
|
|
-package com.hrsk.cloud.eg.domain.common.utils;
|
|
|
-
|
|
|
-import com.google.gson.*;
|
|
|
-import com.google.gson.reflect.TypeToken;
|
|
|
-import com.hrsk.pangu.tool.exception.BizException;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
-import java.lang.reflect.Type;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-
|
|
|
-/**
|
|
|
- * @author zhangyy
|
|
|
- * @version 1.0
|
|
|
- * @description: GsonUtils
|
|
|
- * @date 2024/8/26 18:46
|
|
|
- */
|
|
|
-public class GsonUtil {
|
|
|
- private static Gson gson =new Gson();
|
|
|
- private static final Logger log = LoggerFactory.getLogger(GsonUtil.class);
|
|
|
- /**
|
|
|
- * @description: 对象转json字符串
|
|
|
- * @author zhangyy
|
|
|
- * @date 2024/8/26 18:51
|
|
|
- * @version 1.0
|
|
|
- */
|
|
|
- private static String doToJSONString(Object obj,String formatDate, boolean ignoreNull,
|
|
|
- boolean pretty){
|
|
|
- return getGson(formatDate,ignoreNull, pretty).toJson(obj);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 将对象转为JSON字符串。
|
|
|
- * 日期转为非时间戳的格式,不忽略null值的字段,不格式化JSON字符串
|
|
|
- *
|
|
|
- * @param obj 被转的对象
|
|
|
- * @return JSON字符串,出异常时抛出
|
|
|
- */
|
|
|
- public static String toJSONString(Object obj) {
|
|
|
- return doToJSONString(obj, "yyyy-MM-dd HH:mm:ss", false, false);
|
|
|
- }
|
|
|
- /**
|
|
|
- * @description: 携带参数的转化为json
|
|
|
- * @author zhangyy
|
|
|
- * @date 2024/8/27 14:24
|
|
|
- * @version 1.0
|
|
|
- */
|
|
|
- public static String toJSONString(Object obj,String formatDate) {
|
|
|
- return doToJSONString(obj, formatDate, false, false);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取ObjectMapper。其本身是线程安全的,可以作为成员变量,但传入的参数不可能每次都一样,所以不使用成员变量。
|
|
|
- * (获取的Gson,在解析JSON字符串的时候,若字符串新增了目标类未知的字段,不报错,也就是兼容的。
|
|
|
- * @param dateFormat 日期格式,传null或空串则不设置
|
|
|
- * @param ignoreNull 是否忽略字段值是null的字段
|
|
|
- * @param pretty 是否格式化
|
|
|
- * @return
|
|
|
- */
|
|
|
- private static Gson getGson(String dateFormat,
|
|
|
- boolean ignoreNull,
|
|
|
- boolean pretty) {
|
|
|
- GsonBuilder gsonBuilder = new GsonBuilder();
|
|
|
-
|
|
|
- // 默认序列化的格式是 Feb 13, 2020 11:54:55 AM,如果不指定形式,改成序列化成时间戳形式
|
|
|
- if (StringUtils.isNotBlank(dateFormat)) {
|
|
|
- gsonBuilder.setDateFormat(dateFormat);
|
|
|
- } else {
|
|
|
- // 转json字符串,日期格式使用时间戳
|
|
|
- gsonBuilder.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
|
|
|
- @Override
|
|
|
- public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
|
|
|
- return new JsonPrimitive(src.getTime());
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- // json字符串转对象,日期格式使用时间戳的输入
|
|
|
- gsonBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
|
|
|
- @Override
|
|
|
- public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
|
|
|
- return new Date(json.getAsJsonPrimitive().getAsLong());
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- // 默认忽略所有null值字段
|
|
|
- if (!ignoreNull) {
|
|
|
- gsonBuilder.serializeNulls();
|
|
|
- }
|
|
|
- // 默认不格式化
|
|
|
- if (pretty) {
|
|
|
- gsonBuilder.setPrettyPrinting();
|
|
|
- }
|
|
|
- return gsonBuilder.create();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 传入JSON字符串,不管是对象和列表,都能兼容的方法
|
|
|
- *
|
|
|
- * @param jsonStr
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static <T> T parseJSON(String jsonStr, Class<T> clazz, String dateFormat) {
|
|
|
- try {
|
|
|
- Gson gson = getGson(dateFormat, false, false);
|
|
|
- return gson.fromJson(jsonStr, clazz);
|
|
|
- } catch (Exception e) {
|
|
|
- throw new BizException("Invalid jsonStr,parse error:" + jsonStr, e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @description: json字符串转对象
|
|
|
- * @param:
|
|
|
- * @return:
|
|
|
- * @author zhangyy
|
|
|
- * @date: 2024/8/26 19:28
|
|
|
- */
|
|
|
- public static <T> T parseJSON(String jsonStr, Class<T> clazz) {
|
|
|
- try {
|
|
|
- Gson gson = getGson("yyyy-MM-dd HH:mm:ss", false, false);
|
|
|
- return gson.fromJson(jsonStr, clazz);
|
|
|
- } catch (Exception e) {
|
|
|
- throw new BizException("Invalid jsonStr,parse error:" + jsonStr, e);
|
|
|
- }
|
|
|
- }
|
|
|
- /**
|
|
|
- * json 字符串转成某个类的列表
|
|
|
- *
|
|
|
- * @param jsonStr 传入的JSON字串
|
|
|
- * @param clazz 转为什么类型
|
|
|
- * @param dateFormat 日期格式,传null或空串则不设置,不设置时默认格式化时间戳。当无法格式化的时候抛出异常
|
|
|
- * @param <T> 类型
|
|
|
- * @return 转换失败则抛出异常
|
|
|
- */
|
|
|
- public static <T> List<T> parseJSONList(String jsonStr, Class<T> clazz, String dateFormat) {
|
|
|
- try {
|
|
|
- Gson gson = getGson(dateFormat, false, false);
|
|
|
- Type listType = TypeToken.getParameterized(ArrayList.class, clazz).getType();
|
|
|
- return gson.fromJson(jsonStr, listType);
|
|
|
- } catch (Exception e) {
|
|
|
- throw new BizException("Invalid jsonStr,parse error:" + jsonStr, e);
|
|
|
- }
|
|
|
- }
|
|
|
- /**
|
|
|
- * json 字符串转成某个类的列表
|
|
|
- *
|
|
|
- * @param jsonStr 传入的JSON字串
|
|
|
- * @param clazz 转为什么类型
|
|
|
- * @param <T> 类型
|
|
|
- * @return 转换失败则抛出异常
|
|
|
- */
|
|
|
- public static <T> List<T> parseJSONList(String jsonStr, Class<T> clazz) {
|
|
|
- try {
|
|
|
- Gson gson = getGson("yyyy-MM-dd HH:mm:ss", false, false);
|
|
|
- Type listType = TypeToken.getParameterized(ArrayList.class, clazz).getType();
|
|
|
- return gson.fromJson(jsonStr, listType);
|
|
|
- } catch (Exception e) {
|
|
|
- throw new BizException("Invalid jsonStr,parse error:" + jsonStr, e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-}
|