29-springMvc注解开发-异常处理器

springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。

1 异常处理器的思路

  • 预期异常:通过捕获异常,从而获取异常信息。
  • 运行期异常:通过规范代码,减少运行期异常。

2 异常处理器接口

package org.springframework.web.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.lang.Nullable;
public interface HandlerExceptionResolver {
	/*** 
		用于提供异常处理的逻辑 
	*/
	@Nullable
	ModelAndView resolveException(
			HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex);

}

3 自定义异常处理器

实现HandlerExceptionResolver 接口,自己注入spring容器。

之前讲过这种方式来处理异常:

@ControllerAdvice
public class ExceptionHandlerAdvice {

    /****
     *  value属性:指定的是可以处理哪些异常
     *  形参中的Exception e, 捕获到的异常
     *  通过Model model 返回错误信息给页面
     */
    @ExceptionHandler(value = {IllegalArgumentException.class})
    public String errorHandler(Exception e, Model model){
        model.addAttribute("error",e.getMessage());
        // 返回错误页面
        return "error";
    }
}

现在改为这个:

package study.wyy.spring.anno.web.exceptionresolver;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author by wyaoyao
 * @Description: 自定义异常处理解析器
 * @Date 2021/2/15 7:58 下午
 */
@Component
public class CustomerHandlerExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        //1.创建返回值对象
        ModelAndView mv = new ModelAndView();
        //2.设置错误提示信息
        if(ex instanceof IllegalArgumentException){
            mv.addObject("errorMsg",ex.getMessage());
        }else {
            //系统异常
            mv.addObject("errorMsg","服务器内部错误,请联系管理员!");
        }
        //3.设置结果视图名称
        mv.setViewName("error");
        //4.返回
        return mv;
    }
} 

但是他俩有个区别

  • ControllerAdvice这个方式,还可以处理控制器执行之前出现的异常
  • HandlerExceptionResolver只能处理控制器执行以后的异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值