中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

springboot異常與重定向如何實現

發布時間:2021-12-20 08:51:31 來源:億速云 閱讀:252 作者:iii 欄目:開發技術

本篇內容主要講解“springboot異常與重定向如何實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“springboot異常與重定向如何實現”吧!

springboot 異常與重定向

在spring中,有兩個重定向類型:

  • 301,永久性跳轉

  • 302,暫時性跳轉

默認調用302。

1.下面先通過一個簡單的例子實現頁面的重定向

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

結果:

springboot異常與重定向如何實現

無論是訪問“redirect/301”還是“redirect/302”,結果都會跳轉到首頁,只是一個是301類型,一個是302類型。

2.通過一個更簡單的方法實現重定向

@RequestMapping("/redirect/[code]")
    public RedirectView redirectView(@PathVariable("code") int code,
                               HttpSession session){
 
        //這種跳轉都是302跳轉,通過一個redirect前綴告訴請求,要跳轉到首頁
        //所有的redirect請求都會跳轉到首頁
        return "redirect:/";
    }

結果:

springboot異常與重定向如何實現

這種方式重定向,都是通過302的方式進行的,無論“redirect”后面的url是什么,因為只要識別到redirect這個前綴,就會跳轉到首頁。

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

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

結果:

springboot異常與重定向如何實現

無論redirect后面的url是什么,都會返回首頁,并顯示相應的信息。

4.admin請求異常

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

結果:

springboot異常與重定向如何實現

springboot異常與重定向如何實現

在“key=admin”的時候,返回相應信息;在“key!=admin”的時候,返回錯誤信息。

5.自己定義異常

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

結果:

springboot異常與重定向如何實現

springboot異常與重定向如何實現

可以看出,在出現異常的時候,使我們自己定義的異常界面內容,和4中的不同。

springboot 異常統一處理

這里先對需要使用到的注解或者類進行說明,順便理清楚條理。

@ExceptionHandler:注解使用在方法上,值為指定某個異常,當該方法所在的controller出現的異常與注解的異常對應,則會觸發注解的方法。

下面這個controller一旦出現異常都會將異常捕獲轉給該方法進行處理

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

@controllerAdvice: 注解在類上,注解的類會注冊到spring容器中,類中可有三種注解,@ExceptionHandler,@InitBinder,@ModelAttribute。該類下只要是注解上面三個注解的方法就是讓把方法應用到程序中所有帶有@RequesMapping注解的方法上。

流程 :

  • 自定義一個自己的異常

  • 聲明帶有@ControllerAdvice的類和@ExceptionHandler的方法,將@ExceptionHandler的方法應用到所有controller。

  • 聲明一個返回結果類

  • 聲明一個枚舉類,用來包含可能出現的異常類型

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();
    }
}

自定義返回結果:

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

枚舉類:

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

工具類:

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

自定義異常捕獲類:

@ControllerAdvice
@Slf4j
public class MyExceptionHandler {
 //接收的是Exception,也就是只要是異常都會執行這方法
    @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,"未知錯誤");
        }
    }
}

controller類:

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

流程:

  • 我們訪問http://localhost:8080/user/exception來訪問該方法,并拋出我們自定義的異常,通過枚舉類來進行對異常信息的集合。

  • 通過自定義的異常捕獲類,來進行對異常的捕獲,執行方法。

  • 異常捕獲類的方法中,通過ResultUtil工具類來進行生成Result對象返回。

到此,相信大家對“springboot異常與重定向如何實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

阳山县| 沂南县| 海门市| 喀喇| 资讯| 沐川县| 嘉祥县| 巴彦淖尔市| 花莲市| 南京市| 福泉市| 临海市| 屏山县| 彩票| 固始县| 泽库县| 崇明县| 韶关市| 循化| 玛沁县| 贵德县| 洛南县| 敦煌市| 馆陶县| 香港| 西乌珠穆沁旗| 西林县| 兴业县| 阿拉善左旗| 鄂托克前旗| 佳木斯市| 城市| 开封市| 繁峙县| 荔浦县| 绥化市| 昆山市| 平安县| 丰县| 兴山县| 永清县|