91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot中利用全局異常處理怎么實現登錄注冊驗證

發布時間:2021-06-12 19:11:45 來源:億速云 閱讀:140 作者:Leah 欄目:編程語言

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中利用全局異常處理怎么實現登錄注冊驗證

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜新| 元阳县| 那曲县| 额尔古纳市| 屏东市| 定结县| 三江| 夏河县| 桑植县| 徐汇区| 东明县| 伊川县| 轮台县| 日土县| 阿城市| 洱源县| 肥乡县| 南通市| 临武县| 天等县| 江油市| 屯留县| 台安县| 成武县| 大石桥市| 梨树县| 县级市| 志丹县| 舟曲县| 古蔺县| 无极县| 福清市| 南平市| 昌黎县| 株洲县| 六枝特区| 乃东县| 孟连| 稻城县| 洛阳市| 凌海市|