@RestControllerAdvice,@ExceptionHandler

  • @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响应正文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值