spring框架做全局异常捕获_@ControllerAdvice注解(全局异常捕获)
背景
@ControllerAdvice 注解 通常用于定義@ExceptionHandler, @InitBinder和@ModelAttribute 適用于所有@RequestMapping方法的方法。
@ExceptionHandler異常處理器
作用:可以攔截程序拋出來(lái)的指定異常。使用場(chǎng)景:主要使用與項(xiàng)目統(tǒng)一異常處理,對(duì)于rest風(fēng)格的返回統(tǒng)一異常格式。
/** * 指定攔截異常的類型 * * @param e * @return json格式類型 */@ExceptionHandler({Exception.class}) //指定攔截異常的類型 @ResponseBody public Object customExceptionHandler(Exception e) { //打印異常日志 e.printStackTrace(); //非空驗(yàn)證異常 if(e instanceof BindException){ BindException bindException = (BindException) e; String msg = bindException.getBindingResult().getFieldError().getDefaultMessage(); return msg; } if(e instanceof GlobalException){ GlobalException globalException = (GlobalException) e; return globalException.getErrMsg(); } return "系統(tǒng)異常"; }@InitBinder
作用:
應(yīng)用到所有@RequestMapping注解方法,在其執(zhí)行之前初始化數(shù)據(jù)綁定器
使用場(chǎng)景:
1.可用于綁定作用于全局的請(qǐng)求參數(shù)驗(yàn)證器。
2.日期格式把請(qǐng)求中的日期字符串轉(zhuǎn)換成Date類型。
自定義參數(shù)驗(yàn)證器使用傳送門:SpringBoot自定義參數(shù)驗(yàn)證器
@ModelAttribute
作用:把值綁定到Model中,使全局@RequestMapping可以獲取到該值
使用場(chǎng)景:大家發(fā)揮自己那聰明的小腦袋吧,本人也沒(méi)想到哪里實(shí)戰(zhàn)使用!
/** * 把值綁定到Model中,使全局@RequestMapping可以獲取到該值 * * @param model */ @ModelAttribute public void addAttribute(Model model) { model.addAttribute("msg", "hello"); }獲取參數(shù):
@GetMapping("test") @ResponseBody public Object test(@ModelAttribute("msg") String msg){ return msg; }完整的代碼
package com.wzq.config.exception;import org.springframework.ui.Model;import org.springframework.validation.BindException;import org.springframework.web.bind.WebDataBinder;import org.springframework.web.bind.annotation.*;/** * @description: 全局異常處理類 * @author: Wzq * @create: 2019-12-26 11:01 */@RestControllerAdvicepublic class GlobalExceptionAdvice { /** * 指定攔截異常的類型 * * @param e * @return json格式類型 */ @ExceptionHandler({Exception.class}) //指定攔截異常的類型 @ResponseBody public Object customExceptionHandler(Exception e) { //打印異常日志 e.printStackTrace(); //非空驗(yàn)證異常 if(e instanceof BindException){ BindException bindException = (BindException) e; String msg = bindException.getBindingResult().getFieldError().getDefaultMessage(); return msg; } if(e instanceof GlobalException){ GlobalException globalException = (GlobalException) e; return globalException.getErrMsg(); } return "系統(tǒng)異常"; } /** * 應(yīng)用到所有@RequestMapping注解方法,在其執(zhí)行之前初始化數(shù)據(jù)綁定器 * * @param binder */ @InitBinder public void initWebBinder(WebDataBinder binder) { //對(duì)日期的統(tǒng)一處理// binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd")); //添加對(duì)數(shù)據(jù)的校驗(yàn) //binder.setValidator(); } /** * 把值綁定到Model中,使全局@RequestMapping可以獲取到該值 * * @param model */ @ModelAttribute public void addAttribute(Model model) { model.addAttribute("msg", "hello"); }}@RestControllerAdvice 和 @ControllerAdvice區(qū)別在于@RestControllerAdvice不需要加@ResponseBody
轉(zhuǎn)載自GoslingWu,未經(jīng)許可,嚴(yán)禁抄襲
更多相關(guān)內(nèi)容,Java&python,軟件開(kāi)發(fā)等學(xué)習(xí)資料,電子書及視頻還有高級(jí)講師免費(fèi)課程,
需要的可以私聊小編發(fā)送【學(xué)習(xí)】二字
總結(jié)
以上是生活随笔為你收集整理的spring框架做全局异常捕获_@ControllerAdvice注解(全局异常捕获)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android studio 制作表格_
- 下一篇: 单元格格式_单元格格式的用法你知道吗~~