有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
统一异常处理
在 Java 开发中,统一异常处理是一种常见的最佳实践,它可以帮助我们更好地管理和维护代码,同时也提高了程序的健壮性。以下是如何在 Spring 框架中实现统一异常处理的步骤。
使用 @ControllerAdvice
@ControllerAdvice 是 Spring 3.2 中引入的一个注解,它允许你处理整个应用程序控制器的异常。你可以定义一个或多个类使用这个注解,来处理所有 Controller 层抛出的异常。
1 2 3 4 5 6 7 8 9 10
| @ControllerAdvice public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class) public ResponseEntity<String> handleException(Exception e) { return new ResponseEntity<>("An error occurred: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } }
|
自定义异常类
你可以创建自定义异常类来表示特定的错误情况。
1 2 3 4 5 6
| public class CustomException extends RuntimeException { public CustomException(String message) { super(message); } }
|
然后在 GlobalExceptionHandler
中添加处理这个自定义异常的方法。
1 2 3 4
| @ExceptionHandler(CustomException.class) public ResponseEntity<String> handleCustomException(CustomException e) { return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST); }
|
使用 @ResponseBody
在 @ControllerAdvice
类中,你可以使用 @ResponseBody
注解来确保异常处理方法返回的是响应体内容,而不是视图名称。
1 2 3 4 5
| @ExceptionHandler(CustomException.class) @ResponseBody public ResponseEntity<String> handleCustomException(CustomException e) { return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST); }
|
使用 ResponseEntity
ResponseEntity
是 Spring 提供的一个类,它代表了整个 HTTP 响应的状态码、头信息和体内容。你可以使用它来构建更丰富的响应。
1 2 3 4 5 6 7 8 9
| @ExceptionHandler(CustomException.class) public ResponseEntity<Object> handleCustomException(CustomException e) { Map<String, Object> body = new LinkedHashMap<>(); body.put("timestamp", LocalDateTime.now()); body.put("status", HttpStatus.BAD_REQUEST.value()); body.put("error", e.getMessage());
return new ResponseEntity<>(body, HttpStatus.BAD_REQUEST); }
|
结论
通过上述步骤,你可以实现一个简单而强大的统一异常处理机制。这不仅使得代码更加整洁,而且也使得错误处理更加标准化和易于管理。记得在实际应用中根据具体需求调整和完善你的异常处理策略。