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

springboot?實(shí)戰(zhàn):異常與重定向問(wèn)題

 更新時(shí)間:2021年12月17日 11:22:23   作者:Yangkx-123  
這篇文章主要介紹了springboot實(shí)戰(zhàn):異常與重定向問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot 異常與重定向

在spring中,有兩個(gè)重定向類(lèi)型:

  • 301,永久性跳轉(zhuǎn)
  • 302,暫時(shí)性跳轉(zhuǎn)

默認(rèn)調(diào)用302。

1.下面先通過(guò)一個(gè)簡(jiǎn)單的例子實(shí)現(xiàn)頁(yè)面的重定向

@RequestMapping("/redirect/[code]")
    public RedirectView redirectView(@PathVariable("code") int code,
                               HttpSession session){
 
        RedirectView red = new RedirectView("/",true);
            //判斷是不是301異常
            if (code == 301){
                //默認(rèn)為302轉(zhuǎn)移,此處設(shè)置為永久性轉(zhuǎn)移
                red.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
            }
            return red;
    }

結(jié)果:

無(wú)論是訪問(wèn)“redirect/301”還是“redirect/302”,結(jié)果都會(huì)跳轉(zhuǎn)到首頁(yè),只是一個(gè)是301類(lèi)型,一個(gè)是302類(lèi)型。

2.通過(guò)一個(gè)更簡(jiǎn)單的方法實(shí)現(xiàn)重定向

    @RequestMapping("/redirect/[code]")
    public RedirectView redirectView(@PathVariable("code") int code,
                               HttpSession session){
 
        //這種跳轉(zhuǎn)都是302跳轉(zhuǎn),通過(guò)一個(gè)redirect前綴告訴請(qǐng)求,要跳轉(zhuǎn)到首頁(yè)
        //所有的redirect請(qǐng)求都會(huì)跳轉(zhuǎn)到首頁(yè)
        return "redirect:/";
    }

結(jié)果:

這種方式重定向,都是通過(guò)302的方式進(jìn)行的,無(wú)論“redirect”后面的url是什么,因?yàn)橹灰R(shí)別到redirect這個(gè)前綴,就會(huì)跳轉(zhuǎn)到首頁(yè)。

3.在重定向過(guò)程中,用session傳遞信息

1.重定向頁(yè)面
    @RequestMapping("/redirect/[code]")
    public String redirectView(@PathVariable("code") int code,
                               HttpSession session){
 
        //這種跳轉(zhuǎn)都是302跳轉(zhuǎn),通過(guò)一個(gè)redirect前綴告訴請(qǐng)求,要跳轉(zhuǎn)到首頁(yè)
        //所有的redirect請(qǐng)求都會(huì)跳轉(zhuǎn)到首頁(yè)
        //通過(guò)session來(lái)傳遞信息
        session.setAttribute("msg","Jump from redirect");
        return "redirect:/";
    }
2.首頁(yè)
    @RequestMapping("/")
    @ResponseBody
    public String index(HttpSession session){
        //在首頁(yè)中顯示重定向中的session
        return "Hello World!" + session.getAttribute("msg");
    }

結(jié)果:

無(wú)論redirect后面的url是什么,都會(huì)返回首頁(yè),并顯示相應(yīng)的信息。

4.admin請(qǐng)求異常

    @RequestMapping("/admin")
    @ResponseBody
    public String admin(@RequestParam("key") String key){
    //如果key=“admin”
        if ("admin".equals(key)){
            return "hello admin";
        }
    //否則拋出異常
        throw new IllegalArgumentException("Key Wrong!");
    }

結(jié)果:

在“key=admin”的時(shí)候,返回相應(yīng)信息;在“key!=admin”的時(shí)候,返回錯(cuò)誤信息。

5.自己定義異常

   @ExceptionHandler()
    @ResponseBody
    public String error(Exception e){
        return "error:" + e.getMessage();
    }

結(jié)果:

可以看出,在出現(xiàn)異常的時(shí)候,使我們自己定義的異常界面內(nèi)容,和4中的不同。

springboot 異常統(tǒng)一處理

這里先對(duì)需要使用到的注解或者類(lèi)進(jìn)行說(shuō)明,順便理清楚條理。

@ExceptionHandler:注解使用在方法上,值為指定某個(gè)異常,當(dāng)該方法所在的controller出現(xiàn)的異常與注解的異常對(duì)應(yīng),則會(huì)觸發(fā)注解的方法。

下面這個(gè)controller一旦出現(xiàn)異常都會(huì)將異常捕獲轉(zhuǎn)給該方法進(jìn)行處理

@RestController
@RequestMapping("user")
public class UserController {
    @ExceptionHandler(value = Exception.class)
    public void solveException(){
        //異常處理邏輯
    }
    
}

@controllerAdvice: 注解在類(lèi)上,注解的類(lèi)會(huì)注冊(cè)到spring容器中,類(lèi)中可有三種注解,@ExceptionHandler,@InitBinder,@ModelAttribute。該類(lèi)下只要是注解上面三個(gè)注解的方法就是讓把方法應(yīng)用到程序中所有帶有@RequesMapping注解的方法上。

流程 :

  • 自定義一個(gè)自己的異常
  • 聲明帶有@ControllerAdvice的類(lèi)和@ExceptionHandler的方法,將@ExceptionHandler的方法應(yīng)用到所有controller。
  • 聲明一個(gè)返回結(jié)果類(lèi)
  • 聲明一個(gè)枚舉類(lèi),用來(lái)包含可能出現(xiàn)的異常類(lèi)型

Demo

自定義異常:

@Data
@AllArgsConstructor
public class MyException extends RuntimeException{
    private Integer code;
    private String msg;
    public MyException(ResultEnum resultEnum){
        this.msg = resultEnum.getMsg();
        this.code = resultEnum.getCode();
    }
}

自定義返回結(jié)果:

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

枚舉類(lèi):

public enum  ResultEnum {
    UNKNOW_ERROR(-1,"未知錯(cuò)誤"),
    USER_ERROR(-2,"用戶信息錯(cuò)誤"),
    SUCCESS(0,"成功");
    private  Integer code;
    private  String msg;
    ResultEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    //省略getter和setter
}

工具類(lèi):

public class ResultUtil {
    public static Result error(Integer code, String msg) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
}

自定義異常捕獲類(lèi):

@ControllerAdvice
@Slf4j
public class MyExceptionHandler {
 //接收的是Exception,也就是只要是異常都會(huì)執(zhí)行這方法
    @ExceptionHandler(value=Exception.class)
    @ResponseBody
    public Result handle(Exception e){
        if(e instanceof MyException){
            MyException myException = (MyException) e;
            return ResultUtil.error(myException.getCode(),myException.getMsg());
        }else{
            return ResultUtil.error(-1,"未知錯(cuò)誤");
        }
    }
}

controller類(lèi):

@RestController
@RequestMapping("user")
public class UserController {
    @GetMapping("exception")
    public void catchException() throws Exception{
        throw new MyException(ResultEnum.USER_ERROR);
    }
 }

流程:

  • 我們?cè)L問(wèn)http://localhost:8080/user/exception來(lái)訪問(wèn)該方法,并拋出我們自定義的異常,通過(guò)枚舉類(lèi)來(lái)進(jìn)行對(duì)異常信息的集合。
  • 通過(guò)自定義的異常捕獲類(lèi),來(lái)進(jìn)行對(duì)異常的捕獲,執(zhí)行方法。
  • 異常捕獲類(lèi)的方法中,通過(guò)ResultUtil工具類(lèi)來(lái)進(jìn)行生成Result對(duì)象返回。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java Stream流零基礎(chǔ)教程

    Java Stream流零基礎(chǔ)教程

    Java8的另一大亮點(diǎn)Stream,它與java.io包里的InputStream和OutputStream是完全不同的概念,下面這篇文章主要給大家介紹了關(guān)于Java8中Stream詳細(xì)使用方法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 深入理解java中Arrays.sort()的用法

    深入理解java中Arrays.sort()的用法

    這篇文章主要介紹了深入理解java中Arrays.sort()的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • java實(shí)現(xiàn)學(xué)生教師管理系統(tǒng)

    java實(shí)現(xiàn)學(xué)生教師管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生教師管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • java多線程編程之線程的生命周期

    java多線程編程之線程的生命周期

    線程要經(jīng)歷開(kāi)始(等待)、運(yùn)行、掛起和停止四種不同的狀態(tài)。這四種狀態(tài)都可以通過(guò)Thread類(lèi)中的方法進(jìn)行控制。下面給出了Thread類(lèi)中和這四種狀態(tài)相關(guān)的方法
    2014-01-01
  • Fastjson 常用API介紹及下載地址(推薦)

    Fastjson 常用API介紹及下載地址(推薦)

    Fastjson是一個(gè)Java語(yǔ)言編寫(xiě)的高性能功能完善的JSON庫(kù)。接下來(lái)通過(guò)本文給大家分享Fastjson 常用API介紹及下載地址,感興趣的朋友一起看看吧
    2017-11-11
  • mybatis的映射xml中動(dòng)態(tài)設(shè)置orderby方式

    mybatis的映射xml中動(dòng)態(tài)設(shè)置orderby方式

    這篇文章主要介紹了mybatis的映射xml中動(dòng)態(tài)設(shè)置orderby方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springcloud+Mybatis使用多數(shù)據(jù)源的四種方式(小結(jié))

    Springcloud+Mybatis使用多數(shù)據(jù)源的四種方式(小結(jié))

    這篇文章主要介紹了Springcloud+Mybatis使用多數(shù)據(jù)源的四種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot使用Nacos動(dòng)態(tài)配置數(shù)據(jù)源的方法

    SpringBoot使用Nacos動(dòng)態(tài)配置數(shù)據(jù)源的方法

    這篇文章主要介紹了SpringBoot使用Nacos動(dòng)態(tài)配置數(shù)據(jù)源的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Spring條件注解@ConditionnalOnClass的原理分析

    Spring條件注解@ConditionnalOnClass的原理分析

    這篇文章主要介紹了Spring條件注解@ConditionnalOnClass的原理分析,所謂@ConditionalOnClass注解,翻譯過(guò)來(lái)就是基于class的條件,它為所標(biāo)注的類(lèi)或方法添加限制條件,當(dāng)該條件的值為true時(shí),其所標(biāo)注的類(lèi)或方法才能生效,需要的朋友可以參考下
    2023-12-12
  • java文件操作之Path,Paths,Files

    java文件操作之Path,Paths,Files

    Java7中文件IO發(fā)生了很大的變化,專(zhuān)門(mén)引入了很多新的類(lèi),下面給大家分享用Files作為一個(gè)操作類(lèi)的實(shí)例,需要的朋友可以參考
    2017-04-04

最新評(píng)論

滦南县| 茂名市| 太康县| 江达县| 南丹县| 兰考县| 乐都县| 凭祥市| 三门县| 大同县| 八宿县| 西平县| 柳河县| 璧山县| 长兴县| 南平市| 始兴县| 万州区| 芦溪县| 扬中市| 新宁县| 华容县| 新邵县| 蓬溪县| 浦北县| 临湘市| 尉氏县| 宁陵县| 上饶县| 和林格尔县| 濮阳市| 望江县| 崇仁县| 姜堰市| 大姚县| 石泉县| 正阳县| 浦东新区| 平舆县| 饶阳县| 江口县|