springboot中利用全局异常处理怎么实现登录注册验证

springboot中利用全局异常处理怎么实现登录注册验证,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、重庆小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了远安免费建站欢迎大家使用!

全局异常处理

首先来创建一个sprIngboot的web项目或模块,目录结构如下

springboot中利用全局异常处理怎么实现登录注册验证

实体类User.java

@Data
public class User {
  private String userName;
  private String passwold;
}

实体类UserResult.java 把数据封装到这里返回到客户端

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserResult {
  private int code;
  private String msg;
}

接下来自定义异常,都继承自Exception

UserNullException.java 当用户名为空抛出这个异常

public class UserNullException extends Exception{


  public UserNullException() {
    super("用户名不能为空");
  }
}

PasswoldNullException.java 当密码为空抛出这个异常

public class PasswoldNullException extends Exception {
  public PasswoldNullException() {
    super("密码不能为空");
  }
}

UserNamePasswordNullException.java 当用户名和密码都为空抛出这个异常

public class UserNamePasswordNullException extends Exception {
  public UserNamePasswordNullException() {
    super("请输入用户名和密码");
  }
}

UserNameValidationException.jva 当输入不符合要求的用户名时抛出此异常

public class UserNameValidationException extends Exception{
  public UserNameValidationException() {
    super("请输入6到16位的数字或字母组合");
  }
}

UserNamePasswordNullException.java 当输入的密码不符合要求时抛出这个异常

public class UserNamePasswordNullException extends Exception {
  public UserNamePasswordNullException() {
    super("请输入用户名和密码");
  }
}

通过注解的方式捕获异常

  1. @Controller + @ExceptionHandler

  2. @ControllerAdvice + @ExceptionHandler

若返回的不是页面,把@Controller换成@RestController,@ControllerAdvice换成@RestControllerAdvice,也可以在@Controller类下的方法那里加上@ResponseBody

springboot中利用全局异常处理怎么实现登录注册验证

@Controller + @ExceptionHandler

@Controller:注解此类是Controller类

@ExceptionHandler:此注解注解到类的方法上,当此注解里定义的异常抛出时,此方法会被执行。如果@ExceptionHandler所在的类是@Controller,则此方法只作用在此类。如果@ExceptionHandler所在的类是@ControllerAdvice,则此方法会作用在全局

在这里我只进行了全局异常的捕获,就是只用了@RestControllerAdvice,对全部controller层进行了异常监控,任何控制层抛出常,只要@RestControllerAdvice类下@ExceptionHandler注解的value值指定有的都会被执行

@RestControllerAdvice
public class UserExceptionHandler {

  @ExceptionHandler(value = UserNullException.class)
  public @ResponseBody UserResult userNull(HttpServletRequest request,Exception ex)
  {
    UserResult userResult=new UserResult();
    userResult.setCode(9);
    userResult.setMsg(ex.getMessage());
    return userResult;
  }
  @ExceptionHandler(value = PasswoldNullException.class)
  public  UserResult passwordNull(HttpServletRequest request,Exception ex)
  {
    UserResult userResult=new UserResult();
    userResult.setCode(10);
    userResult.setMsg(ex.getMessage());
    return userResult;
  }
  @ExceptionHandler(value = UserNamePasswordNullException.class)
  public @ResponseBody UserResult namePassNull(HttpServletRequest request,Exception ex)
  {
    UserResult userResult=new UserResult();
    userResult.setCode(11);
    userResult.setMsg(ex.getMessage());
    return userResult;
  }
  @ExceptionHandler(value = UserNameValidationException.class)
  public @ResponseBody UserResult UserNameValidation(HttpServletRequest request,Exception ex)
  {
    UserResult userResult=new UserResult();
    userResult.setCode(12);
    userResult.setMsg(ex.getMessage());
    return userResult;
  }
  @ExceptionHandler(value = PasswordValidationException.class)
  public @ResponseBody UserResult PasswordValidation(HttpServletRequest request,Exception ex)
  {
    UserResult userResult=new UserResult();
    userResult.setCode(13);
    userResult.setMsg(ex.getMessage());
    return userResult;
  }
}

在这里SignInController.java是全局异常捕获类

@RestControllerAdvice
@RequestMapping(value = "user/api")
public class SignInController {

  @PostMapping(value = "/sign_in")
  public UserResult signIn(@RequestBody User user) throws Exception {
    if (user.getUserName()==null&&user.getPasswold()==null)
    {
      throw new UserNamePasswordNullException();
    }else if (user.getUserName()==null)
    {
      throw new UserNullException();
    }else if (user.getPasswold()==null)
    {
        throw new PasswoldNullException();
    }else {
      if (userNameRegex(user.getUserName())==false){
       throw new UserNameValidationException();
      }else if (passRegex(user.getPasswold())==false){
        throw new PasswordValidationException();
      }
    }
    return new UserResult(0,"登录成功");
  }
  /**
   * 正则表达式:验证规则
   */
  public static final String REGEX_PASSWORD = "^[a-zA-Z0-9]{6,16}$";
  /**
   * 手机号
   */
  String PHONE_NUMBER_REG = "^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$";

  public boolean userNameRegex(String userName)
  {
    return Pattern.matches(REGEX_PASSWORD, userName);
  }
  public boolean passRegex(String password)
  {
    return Pattern.matches(REGEX_PASSWORD, password);
  }
}

加为要求前端传的是JSON数据,所以对象参数前务必加上@RequestBody这个注解(踩过坑)

springboot中利用全局异常处理怎么实现登录注册验证

项目中加入了swagger配置(swagger简单使用),这里用来输入几条数据进行测试

springboot中利用全局异常处理怎么实现登录注册验证

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


文章标题:springboot中利用全局异常处理怎么实现登录注册验证
本文网址:http://cdiso.cn/article/gpejhe.html

其他资讯