@ResponseStatus(HttpStatus.FORBIDDEN)
public class AccessDeniedException extends RuntimeException {
}
使用 ResponseEntity 返回自定制的 HTTP 响应
ResponseEntity 类允许我们完全控制响应状态码、标题和正文。我们可以使用它来返回包含附加错误详细信息的自定制 JSON 或 XML 响应。
ResponseEntity.status(HttpStatus.NOT_FOUND)
.body("The specified resource was not found.");
使用 global 属性定义全局错误处理
@RestControllerAdvice 可以使用 global 属性声明为全局错误处理
程序。这意味着它将处理所有未明确处理的异常:
@RestControllerAdvice(global = true)
实战案例
考虑以下 REST 控制器:
@RestController
@RequestMapping("/api/users")
public class UserController {
// ...
@PostMapping
public User createUser(@RequestBody User user) {
if (user.getUsername() == null) {
throw new IllegalArgumentException("Username cannot be null");
}
// ...
}
}
与上述错误处理机制一起使用后,当客户端发送不含 username 的 POST 请求时,它将收到 HTTP 400 “错误的请求”响应以及错误消息。
通过遵循这些最佳实践,您可以确保 Spring Boot 应用程序以优雅且信息丰富的方式处理错误,从而增强用户体验并简化问题解决。