springMvc中@ControllerAdvice和ErrorController接口使用
一、简介
springMvc中对全局的处理,可以使用aop。这里介绍另外一种方式,借助springMvc的ControllerAdvice注解和ErrorController接口。
二、ControllerAdvice注解
@ControllerAdvice(直接返回请求体,可以使用@RestControllerAdvice)可以对控制器进行全局处理,通常借助@ExceptionHandler、@InitBinder、@ModelAttribute处理。
2.1 @ExceptionHandler
@ExceptionHandler用于全局处理控制器异常。示例如下:
2.1.1 使用
定义控制器异常捕获类,类用@ControllerAdvice注解修饰,处理方法用@ExceptionHandler修饰。
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
@ControllerAdvice
public class ExceptionControllerAdvice {
//通过注解@ExceptionHandler捕获所有异常
@ResponseBody
@ExceptionHandler(value = {
Exception.class})
public Object exceptionDispose(Exception e, HttpServletRequest req, HttpServletResponse res) {
Map<String, Object> result = new HashMap<>();
result.put("exception", e.getClass().getName());
result.put("uri", req.getRequestURI());
return result;
}
}
定义会抛异常的控制器:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.