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

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

全局异常处理

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

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

实体类User.java

@Data
publicclassUser{
privateStringuserName;
privateStringpasswold;
}

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

@Data
@NoArgsConstructor
@AllArgsConstructor
publicclassUserResult{
privateintcode;
privateStringmsg;
}

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

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

publicclassUserNullExceptionextendsException{


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

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

publicclassPasswoldNullExceptionextendsException{
publicPasswoldNullException(){
super("密码不能为空");
}
}

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

publicclassUserNamePasswordNullExceptionextendsException{
publicUserNamePasswordNullException(){
super("请输入用户名和密码");
}
}

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

publicclassUserNameValidationExceptionextendsException{
publicUserNameValidationException(){
super("请输入6到16位的数字或字母组合");
}
}

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

publicclassUserNamePasswordNullExceptionextendsException{
publicUserNamePasswordNullException(){
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
publicclassUserExceptionHandler{

@ExceptionHandler(value=UserNullException.class)
public@ResponseBodyUserResultuserNull(HttpServletRequestrequest,Exceptionex)
{
UserResultuserResult=newUserResult();
userResult.setCode(9);
userResult.setMsg(ex.getMessage());
returnuserResult;
}
@ExceptionHandler(value=PasswoldNullException.class)
publicUserResultpasswordNull(HttpServletRequestrequest,Exceptionex)
{
UserResultuserResult=newUserResult();
userResult.setCode(10);
userResult.setMsg(ex.getMessage());
returnuserResult;
}
@ExceptionHandler(value=UserNamePasswordNullException.class)
public@ResponseBodyUserResultnamePassNull(HttpServletRequestrequest,Exceptionex)
{
UserResultuserResult=newUserResult();
userResult.setCode(11);
userResult.setMsg(ex.getMessage());
returnuserResult;
}
@ExceptionHandler(value=UserNameValidationException.class)
public@ResponseBodyUserResultUserNameValidation(HttpServletRequestrequest,Exceptionex)
{
UserResultuserResult=newUserResult();
userResult.setCode(12);
userResult.setMsg(ex.getMessage());
returnuserResult;
}
@ExceptionHandler(value=PasswordValidationException.class)
public@ResponseBodyUserResultPasswordValidation(HttpServletRequestrequest,Exceptionex)
{
UserResultuserResult=newUserResult();
userResult.setCode(13);
userResult.setMsg(ex.getMessage());
returnuserResult;
}
}

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

@RestControllerAdvice
@RequestMapping(value="user/api")
publicclassSignInController{

@PostMapping(value="/sign_in")
publicUserResultsignIn(@RequestBodyUseruser)throwsException{
if(user.getUserName()==null&&user.getPasswold()==null)
{
thrownewUserNamePasswordNullException();
}elseif(user.getUserName()==null)
{
thrownewUserNullException();
}elseif(user.getPasswold()==null)
{
thrownewPasswoldNullException();
}else{
if(userNameRegex(user.getUserName())==false){
thrownewUserNameValidationException();
}elseif(passRegex(user.getPasswold())==false){
thrownewPasswordValidationException();
}
}
returnnewUserResult(0,"登录成功");
}
/**
*正则表达式:验证规则
*/
publicstaticfinalStringREGEX_PASSWORD="^[a-zA-Z0-9]{6,16}$";
/**
*手机号
*/
StringPHONE_NUMBER_REG="^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$";

publicbooleanuserNameRegex(StringuserName)
{
returnPattern.matches(REGEX_PASSWORD,userName);
}
publicbooleanpassRegex(Stringpassword)
{
returnPattern.matches(REGEX_PASSWORD,password);
}
}

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

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

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

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

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

发布于 2021-06-13 23:19:57
收藏
分享
海报
0 条评论
180
上一篇:C语言如何制作简易金山打字通功能 下一篇:C语言数据结构之迷宫问题的示例分析
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码