一、單個(gè)controller范圍的異常處理
/**
- 統(tǒng)一異常處理
- @return
*/
@RequestMapping("/exception")
public String exception(Date date) {
HelloModel helloModel = null;
helloModel.toString();
return "";
}
@ExceptionHandler(value = RuntimeException.class)
public Map exceptionHandller(){
Map handler = new HashMap();
handler.put("code","500");
handler.put("message","系統(tǒng)異常纫事!");
return handler;
}
說明:
在controller中加入被@ExceptionHandler修飾的方法即可(在該注解中指定該方法需要處理的那些異常類)
該異常處理方法只在當(dāng)前的controller中起作用
二、全部controller范圍內(nèi)起作用的異常處理(全局異常處理)
1、全局異常處理類
package com.wxx.demo.handler;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
- @Author : leisure
- @Date : 2019/1/23
*/
//@ControllerAdvice(annotations = RestController.class)//指定注解類
//@ControllerAdvice(basePackages = {"com.demo.xx","com.demo.xx"})//指定掃描包
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 全局異常捕捉處理
* @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;
}
}
說明:
@ControllerAdvice是controller的一個(gè)輔助類,最常用的就是作為全局異常處理的切面類
@ControllerAdvice可以指定掃描范圍
@ControllerAdvice約定了幾種可行的返回值鸠澈,如果是直接返回model類的話逝慧,需要使用@ResponseBody進(jìn)行json轉(zhuǎn)換
返回String,表示跳到某個(gè)view
返回modelAndView
返回model + @ResponseBody
注意:
同一個(gè)異常被局部范圍異常處理器和全局范圍異常處理器同時(shí)覆蓋捌浩,會(huì)選擇小范圍的局部范圍處理器
同一個(gè)異常被小范圍的異常類和大范圍的異常處理器同時(shí)覆蓋放刨,會(huì)選擇小范圍的異常處理器