springmvc全局异常处理,自定义异常处理 只处理一类异常

Spring MVC处理异常有3种方式:
(1) 使用Spring MVC提供的简单异常处理器 SimpleMappingExceptionResolver;
(2) 实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;
(3) 使用@ExceptionHandler注解实现异常处理;

因为博主就看了后面两种所以第一种跳过哈哈哈。
现在来说一下后两种异常处理方式。

  1. 实现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(); 就可以啦~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值