前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringMVC基于注解的异常处理(二)

SpringMVC基于注解的异常处理(二)

原创
作者头像
堕落飞鸟
发布2023-05-14 11:36:37
2790
发布2023-05-14 11:36:37
举报
文章被收录于专栏:飞鸟的专栏

@ExceptionHandler注解的用法

@ExceptionHandler注解可以应用于控制器类和处理器方法上。如果应用于控制器类上,那么所有的处理器方法都将继承该注解,并使用相同的异常处理器。如果应用于处理器方法上,那么只有该方法才会使用该注解定义的异常处理器。

@ExceptionHandler注解可以接受一个或多个异常类型作为参数,用于指定该异常处理器处理的异常类型。如果没有指定异常类型,那么该异常处理器将处理所有未处理的异常。注解方法可以返回不同类型的结果,如响应实体、视图名称、模型和视图等。

下面是一个使用@ExceptionHandler注解处理多个异常类型的示例代码:

代码语言:javascript
复制
@ControllerAdvice
public class GlobalExceptionHandler {

  @ExceptionHandler({InvalidEmailException.class, InvalidPasswordException.class})
  public ResponseEntity<String> handleInvalidInputException(Exception ex) {
    return ResponseEntity
            .status(HttpStatus.BAD_REQUEST)
            .body(ex.getMessage());
  }

  @ExceptionHandler(UserNotFoundException.class)
  public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
    return ResponseEntity
            .status(HttpStatus.NOT_FOUND)
            .body(ex.getMessage());
  }

  @ExceptionHandler(Exception.class)
  public ResponseEntity<String> handleException(Exception ex) {
    return ResponseEntity
            .status(HttpStatus.INTERNAL_SERVER_ERROR)
            .body("An unexpected error occurred.");
  }
}

@Controller
public class UserController {

  @PostMapping("/register")
  public ResponseEntity<String> registerUser(@RequestParam String email, @RequestParam String password) throws InvalidEmailException, InvalidPasswordException {
    if(!isValidEmail(email)) {
      throw new InvalidEmailException("Invalid email address.");
    }
    if(!isValidPassword(password)) {
      throw new InvalidPasswordException("Password must be at least 8 characters long.");
    }
    // 用户注册逻辑
    return ResponseEntity.ok("User registered successfully.");
  }

  private boolean isValidEmail(String email) {
    // 验证电子邮件地址是否有效
    return true;
  }

  private boolean isValidPassword(String password) {
    // 验证密码是否有效
    return password.length() >= 8;
  }

  public static void main(String[] args) {
    SpringApplication.run(UserController.class, args);
  }
}

class InvalidEmailException extends Exception {
  public InvalidEmailException(String message) {
    super(message);
  }
}

class InvalidPasswordException extends Exception {
  public InvalidPasswordException(String message) {
    super(message);
  }
}

class UserNotFoundException extends Exception {
  public UserNotFoundException(String message) {
    super(message);
  }
}

在这个示例中,我们定义了一个GlobalExceptionHandler类,它使用@ControllerAdvice注解标记,表明它是一个全局异常处理器。该类定义了三个异常处理器方法:handleInvalidInputException、handleUserNotFoundException和handleException。这些方法分别处理InvalidEmailException、InvalidPasswordException和UserNotFoundException异常,以及其他所有未处理的异常。异常处理器方法返回一个包含响应状态码和消息的ResponseEntity对象。

我们还定义了一个UserController控制器类,它包含一个名为registerUser的方法,该方法接受email和password两个请求参数。如果email参数不是有效的电子邮件地址或password参数长度小于8个字符,该方法将抛出相应的异常。在这个示例中,我们使用了三种不同的异常类型来演示如何处理不同类型的异常。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • @ExceptionHandler注解的用法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档