diff --git a/powerjob-common/src/main/java/tech/powerjob/common/response/ResultDTO.java b/powerjob-common/src/main/java/tech/powerjob/common/response/ResultDTO.java index 677f411d..5cd90519 100644 --- a/powerjob-common/src/main/java/tech/powerjob/common/response/ResultDTO.java +++ b/powerjob-common/src/main/java/tech/powerjob/common/response/ResultDTO.java @@ -8,6 +8,11 @@ import org.apache.commons.lang3.exception.ExceptionUtils; /** * The result object returned by the request + *

+ * 低版本由于 Jackson 序列化配置问题,导致无法在此对象上新增任何字段了,否则会报错 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "code" (class tech.powerjob.common.response.ObjectResultDTO), not marked as ignorable (3 known properties: "data", "success", "message"]) + * at [Source: (String)"{"success":true,"code":null,"data":2,"message":null}"; line: 1, column: 28] (through reference chain: tech.powerjob.common.response.ObjectResultDTO["code"]) + *

+ * 短期内所有的新增字段需求,都通过新对象继承实现 * * @author tjq * @since 2020/3/30 @@ -17,10 +22,9 @@ import org.apache.commons.lang3.exception.ExceptionUtils; @ToString public class ResultDTO implements PowerSerializable { - private boolean success; - private String code; - private T data; - private String message; + protected boolean success; + protected T data; + protected String message; public static ResultDTO success(T data) { ResultDTO r = new ResultDTO<>(); diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/ControllerExceptionHandler.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/ControllerExceptionHandler.java index 0c9b856f..4903e3cd 100644 --- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/ControllerExceptionHandler.java +++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/ControllerExceptionHandler.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import tech.powerjob.common.exception.PowerJobException; import tech.powerjob.common.response.ResultDTO; +import tech.powerjob.server.web.response.WebResultDTO; /** * 统一处理 web 层异常信息 @@ -23,9 +24,9 @@ public class ControllerExceptionHandler { @ResponseBody @ExceptionHandler(Exception.class) - public ResultDTO exceptionHandler(Exception e) { + public WebResultDTO exceptionHandler(Exception e) { - ResultDTO ret = ResultDTO.failed(ExceptionUtils.getMessage(e)); + WebResultDTO ret = new WebResultDTO<>(ResultDTO.failed(ExceptionUtils.getMessage(e))); // 不是所有异常都需要打印完整堆栈,后续可以定义内部的Exception,便于判断 if (e instanceof PowerJobException) { diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/WebResultDTO.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/WebResultDTO.java new file mode 100644 index 00000000..272c4d39 --- /dev/null +++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/WebResultDTO.java @@ -0,0 +1,27 @@ +package tech.powerjob.server.web.response; + +import lombok.Getter; +import lombok.Setter; +import tech.powerjob.common.response.ResultDTO; + +/** + * WEB 请求结果 + * + * @author tjq + * @since 2024/2/18 + */ +@Getter +@Setter +public class WebResultDTO extends ResultDTO { + + private String code; + + public WebResultDTO() { + } + + public WebResultDTO(ResultDTO res) { + this.success = res.isSuccess(); + this.data = res.getData(); + this.message = res.getMessage(); + } +}