From 1d9d9a327ef06960189cf0e9f026904d37d01ae9 Mon Sep 17 00:00:00 2001
From: liyj <1003249715@qq.com>
Date: Mon, 02 Sep 2024 11:22:42 +0800
Subject: [PATCH] 1、网关请求响应格式修改

---
 dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java |    6 +
 dyh-gateway/src/main/java/cn/huge/gateway/utils/JsonMapper.java  |  212 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 216 insertions(+), 2 deletions(-)

diff --git a/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java b/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java
index 4396a41..5c299ad 100644
--- a/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java
+++ b/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java
@@ -1,5 +1,6 @@
 package cn.huge.gateway.filter;
 
+import cn.huge.gateway.utils.JsonMapper;
 import cn.huge.gateway.utils.ReturnBO;
 import cn.huge.gateway.utils.SpringContextUtil;
 import com.auth0.jwt.JWT;
@@ -84,6 +85,7 @@
         if (status) {
             return chain.filter(exchange);
         } else {
+            JsonMapper jsonMapper = new JsonMapper();
             ReturnBO returnBO = new ReturnBO();
             //从请求头中取出token
             String token = exchange.getRequest().getHeaders().getFirst("Authorization");
@@ -94,7 +96,7 @@
                 originalResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
                 returnBO.setCode(401);
                 returnBO.setMsg("您尚未登录,请登录后重试!");
-                byte[] response = returnBO.toString().getBytes(StandardCharsets.UTF_8);
+                byte[] response = jsonMapper.toJson(returnBO).getBytes(StandardCharsets.UTF_8);
                 DataBuffer buffer = originalResponse.bufferFactory().wrap(response);
                 return originalResponse.writeWith(Flux.just(buffer));
             } else {
@@ -104,7 +106,7 @@
                     ServerHttpResponse originalResponse = exchange.getResponse();
                     originalResponse.setStatusCode(HttpStatus.OK);
                     originalResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
-                    byte[] response = returnBO.toString().getBytes(StandardCharsets.UTF_8);
+                    byte[] response = jsonMapper.toJson(returnBO).getBytes(StandardCharsets.UTF_8);
                     DataBuffer buffer = originalResponse.bufferFactory().wrap(response);
                     return originalResponse.writeWith(Flux.just(buffer));
                 } else {
diff --git a/dyh-gateway/src/main/java/cn/huge/gateway/utils/JsonMapper.java b/dyh-gateway/src/main/java/cn/huge/gateway/utils/JsonMapper.java
new file mode 100644
index 0000000..569dfea
--- /dev/null
+++ b/dyh-gateway/src/main/java/cn/huge/gateway/utils/JsonMapper.java
@@ -0,0 +1,212 @@
+package cn.huge.gateway.utils;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonProcessingException;
+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.databind.util.JSONPObject;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+/**
+ * @title: JSON工具类
+ * @description: JSON工具类
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+public class JsonMapper {
+    private static Logger logger = LoggerFactory.getLogger(JsonMapper.class);
+    private ObjectMapper mapper;
+
+    /**
+     * 构造函数
+     */
+    public JsonMapper() {
+        this(null);
+    }
+
+    /**
+     * 构造函数
+     * @param include
+     */
+    public JsonMapper(JsonInclude.Include include) {
+        this.mapper = new ObjectMapper();
+
+        if (include != null) {
+            this.mapper.setSerializationInclusion(include);
+        }
+
+        this.mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+    }
+
+    /**
+     * 创建非空JsonMapper
+     * @return JsonMapper
+     */
+    public static JsonMapper nonEmptyMapper() {
+        return new JsonMapper(JsonInclude.Include.NON_EMPTY);
+    }
+
+    /**
+     * 创建非默认JsonMapper
+     * @return JsonMapper
+     */
+    public static JsonMapper nonDefaultMapper() {
+        return new JsonMapper(JsonInclude.Include.NON_DEFAULT);
+    }
+
+    /**
+     * 对象转json字符串
+     * @param object 对象
+     * @return String
+     */
+    public String toJson(Object object) {
+        try
+        {
+            return this.mapper.writeValueAsString(object);
+        } catch (IOException e) {
+            logger.warn("write to json string error:" + object, e);
+        }return null;
+    }
+
+    /**
+     * json字符串转对象
+     * @param jsonString json字符串
+     * @param clazz 类
+     * @param <T> 对象
+     * @return T
+     */
+    public <T> T fromJson(String jsonString, Class<T> clazz) {
+        if (StringUtils.isEmpty(jsonString)) {
+            return null;
+        }
+        try
+        {
+            return this.mapper.readValue(jsonString, clazz);
+        } catch (IOException e) {
+            logger.warn("parse json string error:" + jsonString, e);
+        }return null;
+    }
+
+    /**
+     * json字符串转对象
+     * @param jsonString json字符串
+     * @param type 类型
+     * @param <T> 对象
+     * @return T
+     */
+    public <T> T fromJson(String jsonString, TypeReference<T> type) {
+        if (StringUtils.isEmpty(jsonString)) {
+            return null;
+        }
+        try
+        {
+            return this.mapper.readValue(jsonString, type);
+        } catch (IOException e) {
+            logger.warn("parse json string error:" + jsonString, e);
+        }return null;
+    }
+
+    /**
+     * json字符串转对象
+     * @param jsonString json字符串
+     * @param javaType java类型
+     * @param <T> 对象
+     * @return T
+     */
+    public <T> T fromJson(String jsonString, JavaType javaType) {
+        if (StringUtils.isEmpty(jsonString)) {
+            return null;
+        }
+        try
+        {
+            return this.mapper.readValue(jsonString, javaType);
+        } catch (IOException e) {
+            logger.warn("parse json string error:" + jsonString, e);
+        }return null;
+    }
+
+    /**
+     * 创建数组类型
+     * @param collectionClass 数组类型
+     * @param elementClasses 对象类
+     * @return JavaType
+     */
+    public JavaType createCollectionType(Class<?> collectionClass, Class<?>[] elementClasses) {
+        return this.mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
+    }
+
+    /**
+     * 更新
+     * @param jsonString json字符串
+     * @param object 对象
+     * @return T
+     */
+    public <T> T update(String jsonString, T object) {
+        try
+        {
+            return this.mapper.readerForUpdating(object).readValue(jsonString);
+        } catch (JsonProcessingException e) {
+            logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e);
+        } catch (IOException e) {
+            logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e);
+        }
+        return null;
+    }
+
+    /**
+     * 转JsonP
+     * @param functionName 函数名
+     * @param object 对象
+     * @return String
+     */
+    public String toJsonP(String functionName, Object object) {
+        return toJson(new JSONPObject(functionName, object));
+    }
+
+    /**
+     * 转字符串
+     */
+    public void enableEnumUseToString() {
+        this.mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
+        this.mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
+    }
+
+    /**
+     * 获取ObjectMapper
+     * @return ObjectMapper
+     */
+    public ObjectMapper getMapper() {
+        return this.mapper;
+    }
+}
+/**
+ * -------------------_ooOoo_-------------------
+ * ------------------o8888888o------------------
+ * ------------------88" . "88------------------
+ * ------------------(| -_- |)------------------
+ * ------------------O\  =  /O------------------
+ * ---------------____/`---'\____---------------
+ * -------------.'  \\|     |//  `.-------------
+ * ------------/  \\|||  :  |||//  \------------
+ * -----------/  _||||| -:- |||||-  \-----------
+ * -----------|   | \\\  -  /// |   |-----------
+ * -----------| \_|  ''\---/''  |   |-----------
+ * -----------\  .-\__  `-`  ___/-. /-----------
+ * ---------___`. .'  /--.--\  `. . __----------
+ * ------."" '<  `.___\_<|>_/___.'  >'"".-------
+ * -----| | :  `- \`.;`\ _ /`;.`/ - ` : | |-----
+ * -----\  \ `-.   \_ __\ /__ _/   .-` /  /-----
+ * ======`-.____`-.___\_____/___.-`____.-'======
+ * -------------------`=---='
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * ---------佛祖保佑---hugeinfo---永无BUG----------
+ */

--
Gitblit v1.8.0