Spring MVC处理异常有3种方式:
(1) 使用Spring MVC提供的简单异常处理器 SimpleMappingExceptionResolver;
(2) 实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;
(3) 使用@ExceptionHandler注解实现异常处理;
因为博主就看了后面两种所以第一种跳过哈哈哈。
现在来说一下后两种异常处理方式。
实现SpringMVC的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器
springmvc内部默认有一个类似这种处理方式的异常处理,如果咱们定义的话那么会代替springmvc原来默认的那个异常处理,而是用我们新定义的来做全局异常处理。
使用方式为:
@Component
public class MyHandlerExceptionResolver implements HandlerExceptionResolver{
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
// TODO Auto-generated method stub
return null;
}
}
其中@Component
咱们的这个类作为组件被装载到spring中,下面的方法为咱们要实现的方法了,其中ex为controller类抛出的异常。ModelAndView可以帮助咱们异常处理以后返回相应的界面和参数。具体这里不赘述。
值得一提的是当我们要返回json格式的时候:
- 使用fastjson(这个包需要加入项目中)的FastJsonJsonView(它会帮助我们用json的形式返回)
ModelAndView.setView(FastJsonJsonView);
- 直接使用response写出,然后返回一个ModelAndView的对象,对象里可以什么都不用
response.setStatus(HttpStatus.OK.value()); // 设置状态码为200
response.setContentType(MediaType.APPLICATION_JSON_VALUE); // 设置ContentType
response.setCharacterEncoding("UTF-8"); // 避免乱码
response.setHeader("Cache-Control", "no-cache, must-revalidate");
PrintWriter writer = response.getWriter();
2 . 使用@ExceptionHandler注解实现异常处理
@ControllerAdvice
public class ExceptionHandlerAdvice {
@ExceptionHandler(value= {CustomException.class,CodecException.class})
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,Exception ex) {
// TODO Auto-generated method stub
}
在自定的类上加上@ControllerAdvice注解,这个注解的意思是控制器增强。下面的方法和上面那个方法一样。只不过加上了注解@ExceptionHandler,其中value里的值是博主自定义的两个异常。
这样声明以后的意思是说这个类里的这个方法会用来处理CustomException和CodecException异常,当controller抛出这两个异常后会进入到这个方法中。
接下来再controller中直接throw new CustomException();
就可以啦~