成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

leone / 985人閱讀

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

在學(xué)校做一個(gè)校企合作項(xiàng)目,注冊(cè)登錄這一塊需要對(duì)注冊(cè)登錄進(jìn)行輸入合法的服務(wù)器端驗(yàn)證,因?yàn)槭乔昂蠖朔蛛x開發(fā),所以要求返回JSON數(shù)據(jù)。
方法有很多,這覺得用全局異常處理比較容易上手

全局異常處理

首先來創(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;
}
接下來自定義異常,都繼承自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)輸入用戶名和密碼");
    }
}
通過注解的方式捕獲異常

@Controller + @ExceptionHandler

@ControllerAdvice + @ExceptionHandler

若返回的不是頁面,把@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è)注解(踩過坑)


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

github代碼

個(gè)人網(wǎng)站

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77629.html

相關(guān)文章

  • 兩年了,我寫了這些干貨!

    摘要:開公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時(shí),大家搜索起來就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請(qǐng)求前后端分離一使用完美處理權(quán)限問題前后端分離二使用完美處理權(quán)限問題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時(shí),大家搜索起來就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...

    huayeluoliuhen 評(píng)論0 收藏0
  • 慕課網(wǎng)_《SpringBoot進(jìn)階Web進(jìn)階》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼個(gè)人學(xué)習(xí)源碼第一章課程介紹課程介紹本課程緊接著小時(shí)學(xué)會(huì)課程,請(qǐng)先看入門課。異常返回通知在連接點(diǎn)拋出異常后執(zhí)行。 時(shí)間:2017年3月19日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:htt...

    lifefriend_007 評(píng)論0 收藏0
  • SpringBoot-Admin的使用

    摘要:端項(xiàng)目依賴添加是為了使應(yīng)用處于啟動(dòng)狀態(tài),會(huì)自動(dòng)添加相關(guān)依賴。接下來以作為服務(wù)發(fā)現(xiàn)的示例來進(jìn)行演示,實(shí)際上也可以使用或者。最后是一個(gè)用方式監(jiān)聽的使用連接端 【前情提要】Spring Boot Actuator 提供了對(duì)單個(gè) Spring Boot 應(yīng)用的監(jiān)控,信息包含應(yīng)用狀態(tài)、內(nèi)存、線程、堆棧等,比較全面的監(jiān)控了 Spring Boot 應(yīng)用的整個(gè)生命周期。但是這樣監(jiān)控也有一些問題:第一...

    vslam 評(píng)論0 收藏0
  • Web開發(fā)框架推導(dǎo)

    摘要:邊界清晰,有利于理解開發(fā)測(cè)試和部署。前后端分離考慮到目前開發(fā)流行前后端分離,為了適應(yīng)潮流,引入前后端分離的約束。該請(qǐng)求被接受處理,但是該處理是不完整的。 本文欲回答這樣一個(gè)問題:在 「特定環(huán)境 」下,如何規(guī)劃Web開發(fā)框架,使其能滿足 「期望 」? 假設(shè)我們的「特定環(huán)境 」如下: 技術(shù)層面 使用Java語言進(jìn)行開發(fā) 通過Maven構(gòu)建 基于SpringBoot 使用Intelli...

    vpants 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<