From ecf745a1a5f9874ffd079c3c192f6ddcaa970ea8 Mon Sep 17 00:00:00 2001 From: oyo Date: Sun, 14 Dec 2025 16:08:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=AE=9A=E4=B9=89co?= =?UTF-8?q?de=E5=92=8Cmessage=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 8 --- ...pringboot-template-spring5-springboot2.iml | 9 ---- .idea/misc.xml | 10 +--- .idea/modules.xml | 9 ---- .../common/response/FailData.java | 26 ++++++++++ .../ResponseJsonExceptionResolver.java | 22 +++------ .../ResponseJsonMethodReturnValueHandler.java | 24 +++++---- .../response/ResponseMessageHolder.java | 44 +++++++++++++++++ .../common/response/SuccessData.java | 49 +++++++++++++++++++ .../common/utils/JsonUtils.java | 1 - .../common/utils/ObjectMapperFactory.java | 23 +++++++++ 11 files changed, 161 insertions(+), 64 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/common-springboot-template-spring5-springboot2.iml delete mode 100644 .idea/modules.xml create mode 100644 template/common/src/main/java/{{.packagePath}}/common/response/FailData.java create mode 100644 template/common/src/main/java/{{.packagePath}}/common/response/ResponseMessageHolder.java create mode 100644 template/common/src/main/java/{{.packagePath}}/common/response/SuccessData.java create mode 100644 template/common/src/main/java/{{.packagePath}}/common/utils/ObjectMapperFactory.java diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 35410ca..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# 默认忽略的文件 -/shelf/ -/workspace.xml -# 基于编辑器的 HTTP 客户端请求 -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/common-springboot-template-spring5-springboot2.iml b/.idea/common-springboot-template-spring5-springboot2.iml deleted file mode 100644 index d6ebd48..0000000 --- a/.idea/common-springboot-template-spring5-springboot2.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9452703..a818314 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,14 +1,6 @@ - - - - - + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 305f729..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/template/common/src/main/java/{{.packagePath}}/common/response/FailData.java b/template/common/src/main/java/{{.packagePath}}/common/response/FailData.java new file mode 100644 index 0000000..b64a4c7 --- /dev/null +++ b/template/common/src/main/java/{{.packagePath}}/common/response/FailData.java @@ -0,0 +1,26 @@ +package {{ .package }}.common.response; + +public class FailData { + private int code = 500; + private String message; + + public FailData() { + } + + public int getCode() { + return this.code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } + +} diff --git a/template/common/src/main/java/{{.packagePath}}/common/response/ResponseJsonExceptionResolver.java b/template/common/src/main/java/{{.packagePath}}/common/response/ResponseJsonExceptionResolver.java index ce5c1f3..074381d 100644 --- a/template/common/src/main/java/{{.packagePath}}/common/response/ResponseJsonExceptionResolver.java +++ b/template/common/src/main/java/{{.packagePath}}/common/response/ResponseJsonExceptionResolver.java @@ -1,9 +1,6 @@ package {{ .package }}.common.response; -import com.vs.common.util.rpc.pub.FailData; -import com.vs.ox.common.exception.ErrorCode; -import com.vs.ox.common.exception.IgnoredException; -import com.vs.ox.common.utils.ObjectMapperFactory; +import com.vs.ex.BizException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.InitializingBean; @@ -54,21 +51,16 @@ public class ResponseJsonExceptionResolver extends AbstractHandlerExceptionResol @Override protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { - /** - * web请求分页单独处理,应对antd框架 - */ FailData failData = new FailData(); failData.setMessage(ex.getMessage()); - if (ex instanceof IgnoredException) { - IgnoredException realEx = (IgnoredException) ex; - failData.setCode(realEx.getErrorCode()); - failData.setData(realEx.getData()); + if (ex instanceof BizException) { + BizException realEx = (BizException) ex; + failData.setCode(realEx.getCode()); + failData.setMessage(realEx.getMessage()); log.error("execute {} failed with exception", request.getRequestURL(), ex); } else if (ex instanceof ConstraintViolationException) { - failData.setCode(ErrorCode.WRONG_PARAMETER); + failData.setCode(400); failData.setMessage(getMessage((ConstraintViolationException) ex)); - } else if (ex instanceof ErrorCode) { - failData.setCode(((ErrorCode) ex).getErrorCode()); } else { log.error("execute {} failed with exception", request.getRequestURL(), ex); } @@ -101,7 +93,7 @@ public class ResponseJsonExceptionResolver extends AbstractHandlerExceptionResol } param.append(node.getName()); } - msgList.add("参数 [ " + param + " ] " + constraintViolation.getMessage()); + msgList.add("Param [ " + param + " ] " + constraintViolation.getMessage()); } return StringUtils.join(msgList.toArray(), ";"); } diff --git a/template/common/src/main/java/{{.packagePath}}/common/response/ResponseJsonMethodReturnValueHandler.java b/template/common/src/main/java/{{.packagePath}}/common/response/ResponseJsonMethodReturnValueHandler.java index a99592d..d79dcb5 100644 --- a/template/common/src/main/java/{{.packagePath}}/common/response/ResponseJsonMethodReturnValueHandler.java +++ b/template/common/src/main/java/{{.packagePath}}/common/response/ResponseJsonMethodReturnValueHandler.java @@ -1,7 +1,5 @@ package {{ .package }}.common.response; -import com.vs.common.util.rpc.pub.SuccessData; -import com.vs.ox.common.utils.ObjectMapperFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; @@ -15,9 +13,6 @@ import org.springframework.web.method.support.ModelAndViewContainer; import javax.servlet.http.HttpServletResponse; import java.util.Collections; -/** - * 处理 Controller 里的返回值,从 Object转为Json - */ public class ResponseJsonMethodReturnValueHandler implements HandlerMethodReturnValueHandler, InitializingBean { private HttpMessageConverter messageConverter; @@ -35,14 +30,17 @@ public class ResponseJsonMethodReturnValueHandler implements HandlerMethodReturn @Override public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { - mavContainer.setRequestHandled(true); - Object result = returnValue; - /** - * Web分页请求的返回按照antd框架要求的格式,不转为SuccessData - */ - result = result == null ? new SuccessData(Collections.emptyMap()) : new SuccessData(returnValue); - ServletServerHttpResponse response = new ServletServerHttpResponse(webRequest.getNativeResponse(HttpServletResponse.class)); - messageConverter.write(result, new MediaType(MediaType.APPLICATION_JSON, Collections.singletonMap("charset", "utf-8")), response); + try { + mavContainer.setRequestHandled(true); + String customMessage = ResponseMessageHolder.getMessage(); + int code = ResponseMessageHolder.getCode(); + Object result = new SuccessData(code, returnValue, customMessage); + + ServletServerHttpResponse response = new ServletServerHttpResponse(webRequest.getNativeResponse(HttpServletResponse.class)); + messageConverter.write(result, new MediaType(MediaType.APPLICATION_JSON, Collections.singletonMap("charset", "utf-8")), response); + } finally { + ResponseMessageHolder.clear(); + } } diff --git a/template/common/src/main/java/{{.packagePath}}/common/response/ResponseMessageHolder.java b/template/common/src/main/java/{{.packagePath}}/common/response/ResponseMessageHolder.java new file mode 100644 index 0000000..eea6373 --- /dev/null +++ b/template/common/src/main/java/{{.packagePath}}/common/response/ResponseMessageHolder.java @@ -0,0 +1,44 @@ +package {{ .package }}.common.response; + +import java.lang.ThreadLocal; + +public class ResponseMessageHolder { + private static final ThreadLocal MESSAGE_HOLDER = new InheritableThreadLocal<>(); + + public static void setMessage(String message) { + MESSAGE_HOLDER.set(message); + } + + public static String getMessage() { + return MESSAGE_HOLDER.get(); + } + + public static void clear() { + MESSAGE_HOLDER.remove(); + } + + private static final ThreadLocal CODE_HOLDER = new InheritableThreadLocal<>(); + + public static void setCode(Integer code) { + CODE_HOLDER.set(code); + } + + public static Integer getCode() { + Integer code = CODE_HOLDER.get(); + return code == null ? 200 : code; + } + + public static void clearCode() { + CODE_HOLDER.remove(); + } + + public static void setCodeAndMessage(Integer code, String message) { + setCode(code); + setMessage(message); + } + + public static void clearAll() { + MESSAGE_HOLDER.remove(); + CODE_HOLDER.remove(); + } +} \ No newline at end of file diff --git a/template/common/src/main/java/{{.packagePath}}/common/response/SuccessData.java b/template/common/src/main/java/{{.packagePath}}/common/response/SuccessData.java new file mode 100644 index 0000000..2ad201d --- /dev/null +++ b/template/common/src/main/java/{{.packagePath}}/common/response/SuccessData.java @@ -0,0 +1,49 @@ +package {{ .package }}.common.response; + +public class SuccessData { + private int code = 200; + private Object data; + private String message; + + public SuccessData() { + } + + public SuccessData(Object data){ + this.data = data; + } + + public SuccessData(int code, Object data) { + this.code = code; + this.data = data; + } + + public SuccessData(int code, Object data, String message) { + this.code = code; + this.data = data; + this.message = message; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} \ No newline at end of file diff --git a/template/common/src/main/java/{{.packagePath}}/common/utils/JsonUtils.java b/template/common/src/main/java/{{.packagePath}}/common/utils/JsonUtils.java index 137bd3c..67344c8 100644 --- a/template/common/src/main/java/{{.packagePath}}/common/utils/JsonUtils.java +++ b/template/common/src/main/java/{{.packagePath}}/common/utils/JsonUtils.java @@ -7,7 +7,6 @@ import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.MissingNode; -import com.vs.ox.common.utils.ObjectMapperFactory; import java.io.IOException; import java.util.Optional; diff --git a/template/common/src/main/java/{{.packagePath}}/common/utils/ObjectMapperFactory.java b/template/common/src/main/java/{{.packagePath}}/common/utils/ObjectMapperFactory.java new file mode 100644 index 0000000..096fb6f --- /dev/null +++ b/template/common/src/main/java/{{.packagePath}}/common/utils/ObjectMapperFactory.java @@ -0,0 +1,23 @@ +package {{ .package }}.common.utils; + +import com.fasterxml.jackson.core.JsonParser.Feature; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import java.text.SimpleDateFormat; + +public class ObjectMapperFactory { + private static final ObjectMapper objectMapper = new ObjectMapper(); + + public ObjectMapperFactory() { + } + + public static ObjectMapper getDefaultObjectMapper() { + return objectMapper.copy(); + } + + static { + objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES).disable(SerializationFeature.FAIL_ON_EMPTY_BEANS).disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).configure(Feature.ALLOW_SINGLE_QUOTES, true); + objectMapper.setDateFormat(new MyDateFormat()); + } +} \ No newline at end of file