@RestControllerAdvice,@ExceptionHandler r囧r小猫 2024-03-22 14:17 47阅读 0赞 * @RestControllerAdvice是一个注解,用于定义一个全局的异常处理器,它可以在应用程序中捕获所有控制器抛出的异常,并返回适当的HTTP响应。在Spring应用程序中处理异常,可以使用@ControllerAdvice注解。但如果应用程序是RESTful风格的,则建议使用@RestControllerAdvice注解。它和@ControllerAdvice注解非常相似,但它返回的是JSON格式的数据,而不是HTML。 @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(value = { NullPointerException.class}) public ResponseEntity<?> handleNullPointerException(Exception e) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Null pointer exception occurred"); } @ExceptionHandler(value = { IllegalArgumentException.class}) public ResponseEntity<?> handleIllegalArgumentException(Exception e) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Illegal argument exception occurred"); } // other exception handler methods } GlobalExceptionHandler类使用@RestControllerAdvice注解进行注释,并定义了两个异常处理方法。 @ExceptionHandler注解用于指定处理的异常类型,当指定的异常类型抛出时,Spring将调用相应的异常处理方法。在这个例子中,如果发生NullPointerException或IllegalArgumentException异常,将返回一个HTTP 400错误响应,包含相应的错误消息。 总之,@RestControllerAdvice注解可以在Spring应用程序中捕获和处理异常,并返回适当的HTTP响应。 上述代码详解: 1. ResponseEntity<?>是Spring框架中的一个类,它代表了HTTP响应实体,包含了响应状态码、响应头和响应正文等信息。ResponseEntity<?>的泛型参数表示响应正文的类型,可以是任何Java类型,包括自定义类型。通常情况下,响应正文是一个字符串、JSON对象或二进制数据等。 使用ResponseEntity<?>的示例: @GetMapping("/users/{id}") public ResponseEntity<User> getUserById(@PathVariable Long id) { User user = userRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("User not found with id: " + id)); return ResponseEntity.ok(user); } getUserById方法返回一个ResponseEntity<User>对象,其中User是一个自定义的实体类。如果查找到用户,将返回一个HTTP 200响应,包含用户对象的JSON表示。如果未找到用户,则将抛出ResourceNotFoundException异常,并返回一个HTTP 404响应,包含错误消息。 * ResponseEntity<?>类还有其他一些有用的方法,例如: * status(HttpStatus status):设置HTTP响应状态码。 * headers(HttpHeaders headers):设置HTTP响应头。 * body(T body):设置HTTP响应正文。
还没有评论,来说两句吧...