欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

在學(xué)校做一個(gè)校企合作項(xiàng)目,注冊(cè)登錄這一塊需要對(duì)注冊(cè)登錄進(jìn)行輸入合法的服務(wù)器端驗(yàn)證,因?yàn)槭乔昂蠖朔蛛x開(kāi)發(fā),所以要求返回JSON數(shù)據(jù)。

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

全局異常處理

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


實(shí)體類User.java

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

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

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

接下來(lái)自定義異常,都繼承自Exception

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

public class UserNullException extends Exception{


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

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

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

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

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

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

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

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

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

通過(guò)注解的方式捕獲異常

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

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

@Controller + @ExceptionHandler

@Controller:注解此類是Controller類

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

在這里我只進(jìn)行了全局異常的捕獲,就是只用了@RestControllerAdvice,對(duì)全部controller層進(jìn)行了異常監(jiān)控,任何控制層拋出常,只要@RestControllerAdvice類下@ExceptionHandler注解的value值指定有的都會(huì)被執(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,"登錄成功");
  }
  /**
   * 正則表達(dá)式:驗(yàn)證規(guī)則
   */
  public static final String REGEX_PASSWORD = "^[a-zA-Z0-9]{6,16}$";
  /**
   * 手機(jī)號(hào)
   */
  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ù),所以對(duì)象參數(shù)前務(wù)必加上@RequestBody這個(gè)注解(踩過(guò)坑)


項(xiàng)目中加入了swagger配置(swagger簡(jiǎn)單使用),這里用來(lái)輸入幾條數(shù)據(jù)進(jìn)行測(cè)試

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

  • JavaWeb開(kāi)發(fā)入門第二篇Tomcat服務(wù)器配置講解

    JavaWeb開(kāi)發(fā)入門第二篇Tomcat服務(wù)器配置講解

    JavaWeb開(kāi)發(fā)入門第二篇主要介紹了Tomcat服務(wù)器配置的方法教大家如何使用Tomcat服務(wù)器,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 關(guān)于@JSONField和@JsonFormat的使用區(qū)別說(shuō)明

    關(guān)于@JSONField和@JsonFormat的使用區(qū)別說(shuō)明

    這篇文章主要介紹了關(guān)于@JSONField 和 @JsonFormat的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中Stream流對(duì)多個(gè)字段進(jìn)行排序的方法

    Java中Stream流對(duì)多個(gè)字段進(jìn)行排序的方法

    我們?cè)谔幚頂?shù)據(jù)的時(shí)候經(jīng)常會(huì)需要進(jìn)行排序后再返回給前端調(diào)用,比如按照時(shí)間升序排序,前端展示數(shù)據(jù)就是按時(shí)間先后進(jìn)行排序,下面這篇文章主要給大家介紹了關(guān)于Java中Stream流對(duì)多個(gè)字段進(jìn)行排序的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • Java實(shí)現(xiàn)前端jsencrypt.js加密后端解密的示例代碼

    Java實(shí)現(xiàn)前端jsencrypt.js加密后端解密的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用jsencrypt.js實(shí)現(xiàn)前端加密,利用Java實(shí)現(xiàn)后端解密的功能,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-09-09
  • java使用XSSFWorkbook實(shí)現(xiàn)讀寫Excel

    java使用XSSFWorkbook實(shí)現(xiàn)讀寫Excel

    這篇文章主要為大家詳細(xì)介紹了java如何通過(guò)使用XSSFWorkbook實(shí)現(xiàn)讀寫Excel功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • 使用log4j2自定義配置文件位置和文件名(附log4j2.xml配置實(shí)例)

    使用log4j2自定義配置文件位置和文件名(附log4j2.xml配置實(shí)例)

    這篇文章主要介紹了使用log4j2自定義配置文件位置和文件名(附log4j2.xml配置實(shí)例),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • MybatisPlus?構(gòu)造器wrapper的使用與原理解析

    MybatisPlus?構(gòu)造器wrapper的使用與原理解析

    本次我們介紹了MybatisPlus?構(gòu)造器wrapper的使用方式及其易錯(cuò)點(diǎn),同時(shí)也針對(duì)其運(yùn)行的原理進(jìn)行了解釋,只有深刻理解了它的原理,我們才能更靈活的使用,并且更快的排查出問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • List集合多線程并發(fā)條件下不安全如何解決

    List集合多線程并發(fā)條件下不安全如何解決

    List是我們常用的集合,但是在多線程并發(fā)的條件下,會(huì)出現(xiàn)安全問(wèn)題嗎?下面我們就來(lái)測(cè)試一下,如果出現(xiàn)安全問(wèn)題,該如何解決,感興趣的可以了解一下
    2021-12-12
  • Java注解如何基于Redission實(shí)現(xiàn)分布式鎖

    Java注解如何基于Redission實(shí)現(xiàn)分布式鎖

    這篇文章主要介紹了Java注解如何基于Redission實(shí)現(xiàn)分布式鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 最新評(píng)論