controllerAdvice

记下两种方法:

一、使用注解 @controllerAdvice 和 @ExceptionHandler

@ControllerAdvice,是spring3.2提供的新注解

需要把@ControllerAdvice包含进来,否则不起作用:

<context:component-scan base-package="com.sishuok.es" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
@ControllerAdvice
@EnableWebMvc
@Component
public class GlobalExceptionHandler{

@ExceptionHandler(AjaxException.class)
@ResponseBody
public ErrorInfo<String>ajaxException(HttpServletRequest req,Exception e){
ErrorInfo<String> errInfo = new ErrorInfo<String>();
errInfo.setCode(ErrorInfo.ERROR);
errInfo.setMessage(e.getMessage());
errInfo.setUrl(req.getRequestURI().toString());
errInfo.setData("some data");
return errInfo;
}


}
在类上加注解 @ControllerAdvice 所有的异常都会被它捕获,通过 @ExceptionHandler (Exception.class)来选择不同异常的处理方法。

二、spring自定义异常拦截:

@Component
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {

@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object object, Exception exception) {
//是否为ajax请求
String requestType = request.getHeader("X-Requested-With");
if(exception instanceof AuthorizationException){
response.setStatus(413);//无权限异常 主要用于ajax请求返回
response.addHeader("Error-Json", "{\"code\":413,\"msg\":\"nopermission\"}");
response.setContentType("text/html;charset=utf-8");
if("XMLHttpRequest".equals(requestType)){
return new ModelAndView();
}
return new ModelAndView("redirect:/html/413.html");
}
return null;
}
}
实现了接口 HandlerExceptionResolver 进行异常全局统一处理。

 

posted @ 2018-12-05 09:37  如果可以在重来  阅读(589)  评论(0)    收藏  举报