@controllerAdvice注解,表示这个类是一个异常处理控制器
@ExceptionHandler注解,表明需要拦截的异常种类,用value进行标明
示例代码:
/** * 异常同一处理拦截器 * * @author jiajia */ @ControllerAdvice @ResponseBody @Log4j public class ExceptionFilter{ @ExceptionHandler(value = Exception.class) public ResultWrapperDto<?> allExceptionHandler(Exception e){ log.error(e.getMessage()); ResultWrapperDto resultWrapperDto; resultWrapperDto = ResultWrapperUtil.initResultWrapper(MessageConstants.MESSAGE_CODE.get(e.getMessage()), StatusCodeConstants.FAILURE_MSG, e.getMessage()); return resultWrapperDto; } }
我这里的
ResultWrapperDto 是一个封装的返回对象,并不是重点
加上@responseBody注解,从e中拿到错误信息,像普通控制层一样,返回即可
这是普通的示例:
/** * 异常同一处理拦截器 * * @author jiajia */ @ControllerAdvice public class ExceptionFilter{ @ExceptionHandler(value = Exception.class) @ResponseBody public Map<String, Object> allExceptionHandler(Exception e){ Map<String, Object> map = new HashMap<>(2); map.put("code", StatusCodeConstants.FAILURE_CODE); map.put("message", e.getMessage()); return map; } }
技术参考在:http://www.jb51.net/article/134966.htm