在Spring Boot中自定义异常处理主要包括两部分:定义自定义异常和创建全局异常处理器。以下是一个详细的示例,包括自定义异常类、全局异常处理器以及如何在控制器中使用它们。
1. 定义自定义异常类
首先,你需要创建一个自定义异常类,这通常包含一个错误代码和错误消息。这里我们创建一个UserNotFoundException
异常类:
public class UserNotFoundException extends RuntimeException {
private static final long serialVersionUID = 1L;
private final int errorCode;
public UserNotFoundException(int errorCode, String message) {
super(message);
this.errorCode = errorCode;
}
public int getErrorCode() {
return errorCode;
}
}
2. 创建全局异常处理器
接下来,你需要创建一个全局异常处理器,这通常通过使用@ControllerAdvice
注解来完成。在这个处理器中,你可以定义多个方法,每个方法使用@ExceptionHandler
注解来处理不同类型的异常。
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = UserNotFoundException.class)
public ResponseEntity<Object> handleUserNotFoundException(UserNotFoundException ex) {
// 返回一个自定义的错误响应
ErrorResponse errorResponse = new ErrorResponse(
ex.getErrorCode(),
"User Not Found",
ex.getMessage()
);
return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);
}
// 可以添加更多的异常处理器方法
}
3. 定义错误响应对象
为了返回一个更友好的错误响应,我们可以定义一个错误响应对象:
public class ErrorResponse {
private int code;
private String type;
private String message;
public ErrorResponse(int code, String type, String message) {
this.code = code;
this.type = type;
this.message = message;
}
// Getter and Setter methods
}
4. 在控制器中使用自定义异常
现在你可以在控制器中抛出自定义异常:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/user")
public User getUser(@RequestParam("userId") int userId) {
if (userId == 1) {
// 假设用户ID为1的用户不存在
throw new UserNotFoundException(404, "User with ID " + userId + " not found");
}
// 正常情况下的逻辑...
return new User(); // 返回一个用户对象
}
}
5. 测试
当你尝试访问/user
并且传入一个导致异常的用户ID时,你应该能看到一个HTTP状态码为404的响应,以及一个包含错误信息的JSON响应体。
以上步骤展示了如何在Spring Boot中创建和使用自定义异常处理。你可以根据需要扩展GlobalExceptionHandler
类来处理其他类型的异常,或者定义更多自定义异常类来覆盖不同的业务场景。