最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot結(jié)合全局異常處理實現(xiàn)登錄注冊驗證

 更新時間:2019年05月12日 14:41:18   作者:醉臥美人膝  
這篇文章主要介紹了springboot結(jié)合全局異常處理實現(xiàn)登錄注冊驗證,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在學(xué)校做一個校企合作項目,注冊登錄這一塊需要對注冊登錄進行輸入合法的服務(wù)器端驗證,因為是前后端分離開發(fā),所以要求返回JSON數(shù)據(jù)。

方法有很多,這覺得用全局異常處理比較容易上手

全局異常處理

首先來創(chuàng)建一個sprIngboot的web項目或模塊,目錄結(jié)構(gòu)如下


實體類User.java

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

實體類UserResult.java 把數(shù)據(jù)封裝到這里返回到客戶端

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

接下來自定義異常,都繼承自Exception

UserNullException.java 當(dāng)用戶名為空拋出這個異常

public class UserNullException extends Exception{


  public UserNullException() {
    super("用戶名不能為空");
  }
}

PasswoldNullException.java 當(dāng)密碼為空拋出這個異常

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

UserNamePasswordNullException.java 當(dāng)用戶名和密碼都為空拋出這個異常

public class UserNamePasswordNullException extends Exception {
  public UserNamePasswordNullException() {
    super("請輸入用戶名和密碼");
  }
}

UserNameValidationException.jva 當(dāng)輸入不符合要求的用戶名時拋出此異常

public class UserNameValidationException extends Exception{
  public UserNameValidationException() {
    super("請輸入6到16位的數(shù)字或字母組合");
  }
}

UserNamePasswordNullException.java 當(dāng)輸入的密碼不符合要求時拋出這個異常

public class UserNamePasswordNullException extends Exception {
  public UserNamePasswordNullException() {
    super("請輸入用戶名和密碼");
  }
}

通過注解的方式捕獲異常

  1. @Controller + @ExceptionHandler
  2. @ControllerAdvice + @ExceptionHandler

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

@Controller + @ExceptionHandler

@Controller:注解此類是Controller類

@ExceptionHandler:此注解注解到類的方法上,當(dāng)此注解里定義的異常拋出時,此方法會被執(zhí)行。如果@ExceptionHandler所在的類是@Controller,則此方法只作用在此類。如果@ExceptionHandler所在的類是@ControllerAdvice,則此方法會作用在全局

在這里我只進行了全局異常的捕獲,就是只用了@RestControllerAdvice,對全部controller層進行了異常監(jiān)控,任何控制層拋出常,只要@RestControllerAdvice類下@ExceptionHandler注解的value值指定有的都會被執(zhí)行

@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,"登錄成功");
  }
  /**
   * 正則表達式:驗證規(guī)則
   */
  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數(shù)據(jù),所以對象參數(shù)前務(wù)必加上@RequestBody這個注解(踩過坑)


項目中加入了swagger配置(swagger簡單使用),這里用來輸入幾條數(shù)據(jù)進行測試

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實現(xiàn)給網(wǎng)站上傳圖片蓋章的方法

    Java實現(xiàn)給網(wǎng)站上傳圖片蓋章的方法

    這篇文章主要介紹了Java實現(xiàn)給網(wǎng)站上傳圖片蓋章的方法,涉及java針對圖片的合成操作技巧,類似水印功能,需要的朋友可以參考下
    2015-07-07
  • IDEA開啟Run Dashboard的幾種方式

    IDEA開啟Run Dashboard的幾種方式

    Run Dashboard 是 IntelliJ IDEA 中的一個工具窗口,用于管理和監(jiān)視項目中正在運行的應(yīng)用程序和配置,它提供了一種集中管理運行和調(diào)試過程的方式,本文給大家介紹了IDEA開啟Run Dashboard的幾種方式,需要的朋友可以參考下
    2024-03-03
  • Spring如何使用通知?Advice?管理事務(wù)

    Spring如何使用通知?Advice?管理事務(wù)

    Spring 默認采用聲明式事務(wù)管理(通過配置的方式) ,也可以實現(xiàn)編程式事務(wù)管理,這篇文章主要介紹了Spring使用通知Advice管理事務(wù),需要的朋友可以參考下
    2023-06-06
  • Spring?Data?JPA框架的核心概念與Repository接口詳解

    Spring?Data?JPA框架的核心概念與Repository接口詳解

    Spring?Data?JPA是Spring基于JPA規(guī)范的基礎(chǔ)上封裝的?套?JPA?應(yīng)?框架,可使開發(fā)者?極簡的代碼即可實現(xiàn)對數(shù)據(jù)庫的訪問和操作,本篇我們來了解Spring?Data?JPA框架的核心概念與Repository接口
    2022-04-04
  • RabbitMQ消息單獨與批量的TTL詳細介紹

    RabbitMQ消息單獨與批量的TTL詳細介紹

    這篇文章主要介紹了RabbitMQ消息單獨與批量的TTL,TTL全名是Time To Live存活時間,表示當(dāng)消息由生產(chǎn)端存入MQ當(dāng)中的存活時間,當(dāng)時間到達的時候還未被消息就會被自動清除,感興趣的同學(xué)可以參考下文
    2023-05-05
  • Java%(取模運算)全面講解

    Java%(取模運算)全面講解

    這篇文章主要介紹了Java%(取模運算)全面講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 在Spring中自動裝配Bean的屬性

    在Spring中自動裝配Bean的屬性

    今天小編就為大家分享一篇關(guān)于在Spring中自動裝配Bean的屬性,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 基于Java 注解(Annotation)的基本概念詳解

    基于Java 注解(Annotation)的基本概念詳解

    基于Java 注解(Annotation)的基本概念詳解
    2013-04-04
  • JDBC基礎(chǔ)教程

    JDBC基礎(chǔ)教程

    這篇文章主要介紹了JDBC基礎(chǔ)知識與操作技巧,講述原理與基本技巧的基礎(chǔ)上分析了安全問題與操作注意事項,非常具有實用價值,需要的朋友可以參考下
    2014-12-12
  • 解決poi導(dǎo)出時單元格樣式被覆蓋問題

    解決poi導(dǎo)出時單元格樣式被覆蓋問題

    這篇文章主要介紹了解決poi導(dǎo)出時單元格樣式被覆蓋問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論

卢湾区| 镇沅| 镇原县| 定襄县| 舞钢市| 大同县| 吉木乃县| 绥芬河市| 德惠市| 柏乡县| 长汀县| 会同县| 和龙市| 营口市| 玉田县| 通许县| 驻马店市| 玉溪市| 玛曲县| 金阳县| 上饶县| 栾城县| 吴旗县| 龙州县| 雅安市| 绥棱县| 容城县| 三亚市| 嵊泗县| 古浪县| 淮滨县| 岢岚县| 安徽省| 雅江县| 阜南县| 宜丰县| 汨罗市| 枣强县| 利辛县| 舞钢市| 瑞金市|