From 169e3dda48352461cf1bc31dafa9566b13347317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A6=82=E6=A2=A6=E6=8A=80=E6=9C=AF?= <596392912@qq.com> Date: Sun, 5 Jan 2020 17:34:30 +0800 Subject: [PATCH] :bug: List Json log. --- build.gradle | 4 +- .../mica/servlet/logger/RequestLogAspect.java | 33 +++++------ .../net/dreamlu/mica/core/utils/JsonUtil.java | 58 ++++++++++++++++++- 3 files changed, 71 insertions(+), 24 deletions(-) diff --git a/build.gradle b/build.gradle index 3fbced01..5baf2c62 100644 --- a/build.gradle +++ b/build.gradle @@ -1,9 +1,9 @@ ext { javaVersion = JavaVersion.VERSION_1_8 - springBootVersion = "2.1.10.RELEASE" + springBootVersion = "2.1.11.RELEASE" springCloudVersion = "Greenwich.SR4" springCloudAlibabaVersion = "2.1.1.RELEASE" - micaAutoVersion = "1.1.0" + micaAutoVersion = "1.2.0" apolloVersion = "1.4.0" protostuffVersion = "1.6.0" disruptorVersion = "3.4.2" diff --git a/mica-boot/src/main/java/net/dreamlu/mica/servlet/logger/RequestLogAspect.java b/mica-boot/src/main/java/net/dreamlu/mica/servlet/logger/RequestLogAspect.java index dcd337e3..ad421750 100644 --- a/mica-boot/src/main/java/net/dreamlu/mica/servlet/logger/RequestLogAspect.java +++ b/mica-boot/src/main/java/net/dreamlu/mica/servlet/logger/RequestLogAspect.java @@ -16,10 +16,15 @@ package net.dreamlu.mica.servlet.logger; -import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import net.dreamlu.mica.core.utils.*; +import net.dreamlu.mica.core.utils.ClassUtil; +import net.dreamlu.mica.core.utils.JsonUtil; +import net.dreamlu.mica.core.utils.StringUtil; +import net.dreamlu.mica.core.utils.WebUtil; import net.dreamlu.mica.launcher.MicaLogLevel; import net.dreamlu.mica.props.MicaRequestLogProperties; import org.aspectj.lang.ProceedingJoinPoint; @@ -39,7 +44,6 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; import java.util.*; @@ -58,7 +62,6 @@ import java.util.concurrent.TimeUnit; @ConditionalOnProperty(value = MicaLogLevel.REQ_LOG_PROPS_PREFIX + ".enabled", havingValue = "true", matchIfMissing = true) public class RequestLogAspect { private final MicaRequestLogProperties properties; - private final ObjectMapper objectMapper; /** * AOP 环切 控制器 R 返回值 @@ -95,13 +98,13 @@ public class RequestLogAspect { String parameterName = methodParam.getParameterName(); Object value = args[i]; // 如果是body的json则是对象 - if (requestBody != null) { - if (value == null) { - paraMap.put(parameterName, null); - } else if (ClassUtil.isPrimitiveOrWrapper(value.getClass())) { - paraMap.put(parameterName, value); + if (requestBody != null && value != null) { + JsonNode jsonNode = JsonUtil.valueToTree(value); + if (JsonUtil.valueToTree(value) instanceof ObjectNode) { + paraMap.putAll(JsonUtil.convertValue(jsonNode, new TypeReference>() { + })); } else { - paraMap.putAll(BeanUtil.toMap(value)); + paraMap.put(parameterName, value); } continue; } @@ -135,7 +138,7 @@ public class RequestLogAspect { paraMap.put(paraName, "InputStream"); } else if (value instanceof InputStreamSource) { paraMap.put(paraName, "InputStreamSource"); - } else if (canJsonSerialize(value)) { + } else if (JsonUtil.canSerialize(value)) { // 判断模型能被 json 序列化,则添加 paraMap.put(paraName, value); } else { @@ -201,12 +204,4 @@ public class RequestLogAspect { } } - private boolean canJsonSerialize(Object value) { - try { - objectMapper.writeValueAsBytes(value); - return true; - } catch (IOException e) { - return false; - } - } } diff --git a/mica-core/src/main/java/net/dreamlu/mica/core/utils/JsonUtil.java b/mica-core/src/main/java/net/dreamlu/mica/core/utils/JsonUtil.java index d0b92b3a..cf8b36d4 100644 --- a/mica-core/src/main/java/net/dreamlu/mica/core/utils/JsonUtil.java +++ b/mica-core/src/main/java/net/dreamlu/mica/core/utils/JsonUtil.java @@ -18,6 +18,7 @@ package net.dreamlu.mica.core.utils; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.TreeNode; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.type.CollectionLikeType; @@ -204,7 +205,7 @@ public class JsonUtil { * @return Bean */ @Nullable - public static T readValue(@Nullable byte[] content, TypeReference typeReference) { + public static T readValue(@Nullable byte[] content, TypeReference typeReference) { if (ObjectUtil.isEmpty(content)) { return null; } @@ -224,7 +225,7 @@ public class JsonUtil { * @return Bean */ @Nullable - public static T readValue(@Nullable String jsonString, TypeReference typeReference) { + public static T readValue(@Nullable String jsonString, TypeReference typeReference) { if (StringUtil.isBlank(jsonString)) { return null; } @@ -244,7 +245,7 @@ public class JsonUtil { * @return Bean */ @Nullable - public static T readValue(@Nullable InputStream in, TypeReference typeReference) { + public static T readValue(@Nullable InputStream in, TypeReference typeReference) { if (in == null) { return null; } @@ -396,6 +397,18 @@ public class JsonUtil { } } + /** + * jackson 的类型转换 + * + * @param fromValue 来源对象 + * @param toValueType 转换的类型 + * @param 泛型标记 + * @return 转换结果 + */ + public static T convertValue(Object fromValue, Class toValueType) { + return getInstance().convertValue(fromValue, toValueType); + } + /** * jackson 的类型转换 * @@ -420,6 +433,45 @@ public class JsonUtil { return getInstance().convertValue(fromValue, toValueTypeRef); } + /** + * tree 转对象 + * + * @param treeNode TreeNode + * @param valueType valueType + * @param 泛型标记 + * @return 转换结果 + */ + public static T treeToValue(TreeNode treeNode, Class valueType) { + try { + return getInstance().treeToValue(treeNode, valueType); + } catch (JsonProcessingException e) { + throw Exceptions.unchecked(e); + } + } + + /** + * 对象转为 json node + * + * @param value 对象 + * @return JsonNode + */ + public static JsonNode valueToTree(@Nullable Object value) { + return getInstance().valueToTree(value); + } + + /** + * 判断是否可以序列化 + * + * @param value 对象 + * @return 是否可以序列化 + */ + public static boolean canSerialize(@Nullable Object value) { + if (value == null) { + return true; + } + return getInstance().canSerialize(value.getClass()); + } + public static ObjectMapper getInstance() { return JacksonHolder.INSTANCE; } -- GitLab