springboot中利用全局異常處理怎么實現(xiàn)登錄注冊驗證,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了遠安免費建站歡迎大家使用!
全局異常處理
首先來創(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 當用戶名為空拋出這個異常
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位的數(shù)字或字母組合"); } }
UserNamePasswordNullException.java 當輸入的密碼不符合要求時拋出這個異常
public class UserNamePasswordNullException extends Exception { public UserNamePasswordNullException() { super("請輸入用戶名和密碼"); } }
通過注解的方式捕獲異常
@Controller + @ExceptionHandler
@ControllerAdvice + @ExceptionHandler
若返回的不是頁面,把@Controller換成@RestController,@ControllerAdvice換成@RestControllerAdvice,也可以在@Controller類下的方法那里加上@ResponseBody
@Controller + @ExceptionHandler
@Controller:注解此類是Controller類
@ExceptionHandler:此注解注解到類的方法上,當此注解里定義的異常拋出時,此方法會被執(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)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。
本文名稱:springboot中利用全局異常處理怎么實現(xiàn)登錄注冊驗證
轉(zhuǎn)載源于:http://jinyejixie.com/article44/gpejhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司、做網(wǎng)站、網(wǎng)站改版、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)