完善统一返回 和异常处理

This commit is contained in:
zk
2026-03-13 16:30:17 +08:00
parent a7591c6991
commit d2062c7e07
2 changed files with 47 additions and 26 deletions
@@ -3,6 +3,10 @@ package org.jiayunet.pojo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.slf4j.MDC;
import java.time.Instant;
/** /**
* 接口数据同一响应格式 * 接口数据同一响应格式
@@ -17,12 +21,31 @@ public class UnifiedResponse<T> {
private String code; private String code;
private String msg; private String msg;
private T data; private T data;
private String timestamp;
private String uuid;
public static <K> UnifiedResponse<K> normalResponse(K date) { /**
* 设置时间戳为当前时刻(Unix秒级时间戳)
*/
public void setTimestamp() {
this.timestamp = String.valueOf(Instant.now().getEpochSecond());
}
/**
* 设置uuid为当前请求链路traceId(来自MDC)
*/
public void setUuid() {
this.uuid = MDC.get("traceId");
}
public static <K> UnifiedResponse<K> normalResponse(K data) {
UnifiedResponse<K> unifiedResponse = new UnifiedResponse<K>(); UnifiedResponse<K> unifiedResponse = new UnifiedResponse<K>();
unifiedResponse.setCode("0"); unifiedResponse.setCode("0");
unifiedResponse.setMsg("正常响应"); unifiedResponse.setMsg("正常响应");
unifiedResponse.setData(date); unifiedResponse.setData(data);
unifiedResponse.setTimestamp();
unifiedResponse.setUuid();
return unifiedResponse; return unifiedResponse;
} }
@@ -30,6 +53,8 @@ public class UnifiedResponse<T> {
UnifiedResponse<?> unifiedResponse = new UnifiedResponse<Object>(); UnifiedResponse<?> unifiedResponse = new UnifiedResponse<Object>();
unifiedResponse.setCode(code); unifiedResponse.setCode(code);
unifiedResponse.setMsg(msg); unifiedResponse.setMsg(msg);
unifiedResponse.setTimestamp();
unifiedResponse.setUuid();
return unifiedResponse; return unifiedResponse;
} }
@@ -38,6 +63,8 @@ public class UnifiedResponse<T> {
unifiedResponse.setCode(code); unifiedResponse.setCode(code);
unifiedResponse.setMsg(msg); unifiedResponse.setMsg(msg);
unifiedResponse.setData(data); unifiedResponse.setData(data);
unifiedResponse.setTimestamp();
unifiedResponse.setUuid();
return unifiedResponse; return unifiedResponse;
} }
@@ -17,6 +17,8 @@ import org.jiayunet.pojo.UnifiedResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
* 全局异常处理
*
* @author zk * @author zk
*/ */
@RestControllerAdvice @RestControllerAdvice
@@ -26,14 +28,14 @@ public class GlobalExceptionAdvice {
@ExceptionHandler({MethodArgumentTypeMismatchException.class}) @ExceptionHandler({MethodArgumentTypeMismatchException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
public UnifiedResponse<?> methodArgumentTypeMismatchExceptionHandler(MethodArgumentTypeMismatchException ex) { public UnifiedResponse<?> methodArgumentTypeMismatchExceptionHandler(MethodArgumentTypeMismatchException ex) {
ex.printStackTrace(); log.error("参数类型不匹配: {}", ex.getMessage(), ex);
return this.unifiedExpResponse(BusinessExpCodeEnum.PARAMS_INCORRECT.getCode(), ex.getMessage()); return UnifiedResponse.fail(BusinessExpCodeEnum.PARAMS_INCORRECT.getCode(), ex.getMessage());
} }
@ExceptionHandler({BusinessException.class}) @ExceptionHandler({BusinessException.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(HttpStatus.OK)
public UnifiedResponse<?> businessCheckExceptionHandler(BusinessException ex) { public UnifiedResponse<?> businessCheckExceptionHandler(BusinessException ex) {
ex.printStackTrace(); log.warn("业务异常: code={}, msg={}", ex.getBusinessCode(), ex.getMessage());
String description = ex.getDescription(); String description = ex.getDescription();
String msg = ex.getBusinessMsg(); String msg = ex.getBusinessMsg();
@@ -45,43 +47,35 @@ public class GlobalExceptionAdvice {
} }
} }
return UnifiedResponse.fail(ex.getBusinessCode(), msg, ex.getData()); return UnifiedResponse.fail(ex.getBusinessCode(), msg, ex.getData());
} }
@ExceptionHandler({IllegalArgumentException.class}) @ExceptionHandler({IllegalArgumentException.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public UnifiedResponse<?> mybatisPlusException(IllegalArgumentException ex) { public UnifiedResponse<?> mybatisPlusException(IllegalArgumentException ex) {
ex.printStackTrace(); log.error("断言异常: {}", ex.getMessage(), ex);
return this.unifiedExpResponse("断言异常", ex.getMessage()); return UnifiedResponse.fail(BusinessExpCodeEnum.UNKNOWN_ERROR.getCode(), ex.getMessage());
} }
@ExceptionHandler({ValidationException.class}) @ExceptionHandler({ValidationException.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(HttpStatus.BAD_REQUEST)
public UnifiedResponse<?> validationException(ValidationException ex) { public UnifiedResponse<?> validationException(ValidationException ex) {
ex.printStackTrace(); log.error("参数校验异常: {}", ex.getMessage(), ex);
return this.unifiedExpResponse("参数异常拦截", ex.getMessage()); return UnifiedResponse.fail(BusinessExpCodeEnum.PARAMS_INCORRECT.getCode(), ex.getMessage());
} }
@ExceptionHandler({BindException.class}) @ExceptionHandler({BindException.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(HttpStatus.BAD_REQUEST)
public UnifiedResponse<?> bindException(BindException ex) { public UnifiedResponse<?> bindException(BindException ex) {
ex.printStackTrace(); log.error("参数绑定异常: {}", ex.getMessage(), ex);
return this.unifiedExpResponse("参数绑定异常", ex.getMessage()); return UnifiedResponse.fail(BusinessExpCodeEnum.PARAMS_INCORRECT.getCode(), ex.getMessage());
} }
@ExceptionHandler({Exception.class}) @ExceptionHandler({Exception.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public UnifiedResponse<?> lastExceptionHandler(Exception ex) { public UnifiedResponse<?> lastExceptionHandler(Exception ex) {
BusinessExpCodeEnum unknownError = BusinessExpCodeEnum.UNKNOWN_ERROR; BusinessExpCodeEnum unknownError = BusinessExpCodeEnum.UNKNOWN_ERROR;
ex.printStackTrace(); log.error("未知异常: {}", ex.getMessage(), ex);
return this.unifiedExpResponse(unknownError.getCode(), unknownError.getMsg()); return UnifiedResponse.fail(unknownError.getCode(), unknownError.getMsg());
} }
private UnifiedResponse<?> unifiedExpResponse(String code, String msg) {
return UnifiedResponse.fail(code, msg);
}
private UnifiedResponse<?> unifiedExpResponse(String errorFrom, String code, String msg) {
return UnifiedResponse.fail(code, msg);
}
} }