add backend
This commit is contained in:
16
backend/src/main/java/com/yoyuzh/common/ApiResponse.java
Normal file
16
backend/src/main/java/com/yoyuzh/common/ApiResponse.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package com.yoyuzh.common;
|
||||
|
||||
public record ApiResponse<T>(int code, String msg, T data) {
|
||||
|
||||
public static <T> ApiResponse<T> success(T data) {
|
||||
return new ApiResponse<>(0, "success", data);
|
||||
}
|
||||
|
||||
public static ApiResponse<Void> success() {
|
||||
return new ApiResponse<>(0, "success", null);
|
||||
}
|
||||
|
||||
public static ApiResponse<Void> error(ErrorCode errorCode, String msg) {
|
||||
return new ApiResponse<>(errorCode.getCode(), msg, null);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.yoyuzh.common;
|
||||
|
||||
public class BusinessException extends RuntimeException {
|
||||
|
||||
private final ErrorCode errorCode;
|
||||
|
||||
public BusinessException(ErrorCode errorCode, String message) {
|
||||
super(message);
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
public ErrorCode getErrorCode() {
|
||||
return errorCode;
|
||||
}
|
||||
}
|
||||
18
backend/src/main/java/com/yoyuzh/common/ErrorCode.java
Normal file
18
backend/src/main/java/com/yoyuzh/common/ErrorCode.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package com.yoyuzh.common;
|
||||
|
||||
public enum ErrorCode {
|
||||
UNKNOWN(1000),
|
||||
NOT_LOGGED_IN(1001),
|
||||
PERMISSION_DENIED(1002),
|
||||
FILE_NOT_FOUND(1003);
|
||||
|
||||
private final int code;
|
||||
|
||||
ErrorCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.yoyuzh.common;
|
||||
|
||||
import jakarta.validation.ConstraintViolationException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
import org.springframework.security.authentication.BadCredentialsException;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
@Slf4j
|
||||
@RestControllerAdvice
|
||||
public class GlobalExceptionHandler {
|
||||
|
||||
@ExceptionHandler(BusinessException.class)
|
||||
public ResponseEntity<ApiResponse<Void>> handleBusinessException(BusinessException ex) {
|
||||
HttpStatus status = switch (ex.getErrorCode()) {
|
||||
case NOT_LOGGED_IN -> HttpStatus.UNAUTHORIZED;
|
||||
case PERMISSION_DENIED -> HttpStatus.FORBIDDEN;
|
||||
case FILE_NOT_FOUND -> HttpStatus.NOT_FOUND;
|
||||
default -> HttpStatus.BAD_REQUEST;
|
||||
};
|
||||
return ResponseEntity.status(status).body(ApiResponse.error(ex.getErrorCode(), ex.getMessage()));
|
||||
}
|
||||
|
||||
@ExceptionHandler({MethodArgumentNotValidException.class, ConstraintViolationException.class})
|
||||
public ResponseEntity<ApiResponse<Void>> handleValidationException(Exception ex) {
|
||||
return ResponseEntity.badRequest().body(ApiResponse.error(ErrorCode.UNKNOWN, ex.getMessage()));
|
||||
}
|
||||
|
||||
@ExceptionHandler(AccessDeniedException.class)
|
||||
public ResponseEntity<ApiResponse<Void>> handleAccessDenied(AccessDeniedException ex) {
|
||||
return ResponseEntity.status(HttpStatus.FORBIDDEN)
|
||||
.body(ApiResponse.error(ErrorCode.PERMISSION_DENIED, "没有权限访问该资源"));
|
||||
}
|
||||
|
||||
@ExceptionHandler(BadCredentialsException.class)
|
||||
public ResponseEntity<ApiResponse<Void>> handleBadCredentials(BadCredentialsException ex) {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
|
||||
.body(ApiResponse.error(ErrorCode.NOT_LOGGED_IN, "用户名或密码错误"));
|
||||
}
|
||||
|
||||
@ExceptionHandler(Exception.class)
|
||||
public ResponseEntity<ApiResponse<Void>> handleUnknown(Exception ex) {
|
||||
log.error("Unhandled exception", ex);
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
||||
.body(ApiResponse.error(ErrorCode.UNKNOWN, "服务器内部错误"));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.yoyuzh.common;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public record PageResponse<T>(List<T> items, long total, int page, int size) {
|
||||
}
|
||||
Reference in New Issue
Block a user