久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

SpringBoot @ControllerAdvice 攔截異常并統一處理

瀏覽:63日期:2023-04-25 10:38:02

在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定義@ExceptionHandler、@InitBinder、@ModelAttribute,并應用到所有@RequestMapping中。參考:@ControllerAdvice 文檔

一、介紹

創建 MyControllerAdvice,并添加 @ControllerAdvice注解。

package com.sam.demo.controller;import org.springframework.ui.Model;import org.springframework.web.bind.WebDataBinder;import org.springframework.web.bind.annotation.*;import java.util.HashMap;import java.util.Map;/** * controller 增強器 * @author sam * @since 2017/7/17 */@ControllerAdvicepublic class MyControllerAdvice { /** * 應用到所有@RequestMapping注解方法,在其執行之前初始化數據綁定器 * @param binder */ @InitBinder public void initBinder(WebDataBinder binder) {} /** * 把值綁定到Model中,使全局@RequestMapping可以獲取到該值 * @param model */ @ModelAttribute public void addAttributes(Model model) { model.addAttribute('author', 'Magical Sam'); } /** * 全局異常捕捉處理 * @param ex * @return */ @ResponseBody @ExceptionHandler(value = Exception.class) public Map errorHandler(Exception ex) { Map map = new HashMap(); map.put('code', 100); map.put('msg', ex.getMessage()); return map; }}

啟動應用后,被 @ExceptionHandler、@InitBinder、@ModelAttribute 注解的方法,都會作用在 被 @RequestMapping 注解的方法上。

@ModelAttribute:在Model上設置的值,對于所有被 @RequestMapping 注解的方法中,都可以通過 ModelMap 獲取,如下:

@RequestMapping('/home')public String home(ModelMap modelMap) { System.out.println(modelMap.get('author'));}//或者 通過@ModelAttribute獲取@RequestMapping('/home')public String home(@ModelAttribute('author') String author) { System.out.println(author);}

@ExceptionHandler 攔截了異常,我們可以通過該注解實現自定義異常處理。其中,@ExceptionHandler 配置的 value 指定需要攔截的異常類型,上面攔截了 Exception.class 這種異常。

二、自定義異常處理(全局異常處理)

spring boot 默認情況下會映射到 /error 進行異常處理,但是提示并不十分友好,下面自定義異常處理,提供友好展示。

1、編寫自定義異常類:

package com.sam.demo.custom;/** * @author sam * @since 2017/7/17 */public class MyException extends RuntimeException { public MyException(String code, String msg) { this.code = code; this.msg = msg; } private String code; private String msg; // getter & setter}

注:spring 對于 RuntimeException 異常才會進行事務回滾。

2、編寫全局異常處理類

創建 MyControllerAdvice.java,如下:

package com.sam.demo.controller;import org.springframework.ui.Model;import org.springframework.web.bind.WebDataBinder;import org.springframework.web.bind.annotation.*;import java.util.HashMap;import java.util.Map;/** * controller 增強器 * * @author sam * @since 2017/7/17 */@ControllerAdvicepublic class MyControllerAdvice { /** * 全局異常捕捉處理 * @param ex * @return */ @ResponseBody @ExceptionHandler(value = Exception.class) public Map errorHandler(Exception ex) { Map map = new HashMap(); map.put('code', 100); map.put('msg', ex.getMessage()); return map; } /** * 攔截捕捉自定義異常 MyException.class * @param ex * @return */ @ResponseBody @ExceptionHandler(value = MyException.class) public Map myErrorHandler(MyException ex) { Map map = new HashMap(); map.put('code', ex.getCode()); map.put('msg', ex.getMsg()); return map; }}

3、controller中拋出異常進行測試。

@RequestMapping('/home')public String home() throws Exception {// throw new Exception('Sam 錯誤'); throw new MyException('101', 'Sam 錯誤');}

啟動應用,訪問:http://localhost:8080/home ,正常顯示以下json內容,證明自定義異常已經成功被攔截。

{'msg':'Sam 錯誤','code':'101'}

* 如果不需要返回json數據,而要渲染某個頁面模板返回給瀏覽器,那么MyControllerAdvice中可以這么實現:

@ExceptionHandler(value = MyException.class)public ModelAndView myErrorHandler(MyException ex) { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName('error'); modelAndView.addObject('code', ex.getCode()); modelAndView.addObject('msg', ex.getMsg()); return modelAndView;}

在 templates 目錄下,添加 error.ftl(這里使用freemarker) 進行渲染:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>錯誤頁面</title></head><body> <h1>$[code]</h1> <h1>${msg}</h1></body></html>

重啟應用,http://localhost:8080/home 顯示自定的錯誤頁面內容。

補充:如果全部異常處理返回json,那么可以使用 @RestControllerAdvice 代替 @ControllerAdvice ,這樣在方法上就可以不需要添加 @ResponseBody。

到此這篇關于SpringBoot @ControllerAdvice 攔截異常并統一處理的文章就介紹到這了,更多相關SpringBoot @ControllerAdvice 攔截異常內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 亚洲一区精品在线 | 在线日韩中文字幕 | 精品国产一区二区在线 | 香港黄色录像片 | 中文字幕在线三区 | 亚洲精品乱码久久久久久金桔影视 | gav成人免费播放视频 | 欧美视频在线免费 | 91中文字幕在线 | 欧美日韩中文在线 | 天天综合网久久综合网 | 亚洲91精品 | 日韩在线免费观看视频 | 欧美国产伦久久久久久 | 国产一区二区视频在线 | 久久久久国产精品一区二区 | 亚洲电影一区二区 | 欧美一级黄色片 | 色综合久久伊人 | 日韩精品视频免费专区在线播放 | 久久久久久毛片免费观看 | 国产精品久久久久久久岛一牛影视 | 国产偷自视频区视频 | 色黄视频在线 | 欧美精品免费在线观看 | 日韩在线小视频 | 欧美视频在线一区 | 91丝袜| 91久久久久久 | 黄色四虎| 一级免费视频 | 伊人av成人| 国产一区二区三区高清 | 日韩av在线一区 | www.亚洲成人网 | 国产一区中文字幕 | 亚洲一区二区三区观看 | 国产成人一区二区三区影院在线 | 日日操操| 久久亚洲一区 | 七龙珠z普通话国语版在线观看 |