美文网首页
Spring的全局异常处理

Spring的全局异常处理

作者: 我是邱邱 | 来源:发表于2019-07-19 09:30 被阅读0次

常见的异常处理除了一般的try.....catch以及throw,Spring中也提供了异常处理的方法,下面我就简单的说一下,其实就用到了三个比较重要的注解:@ControllerAdvice、@ExceptionHanlder、@ResponseStatus

@ControllerAdvice:

用于全局异常的回调,主要用于修饰类,不需要其他的配置,只要将类放入到项目中,Spring能扫描的地方,就可以实现全局异常的回调

@ExceptionHanlder

自动捕获控制层中出现的指定类型的异常,并对该异常进行相关的处理,用来修饰一个方法。如果想要捕获多种类型的异常,那么该注解括号中使用{}来修饰,{}中存放多个异常类

@ResponseStatus

可以将异常映射为Http对应的状态码
例如:@ResponseStatus(value=HttpStatus.FORBIDDEN,reason="不允许访问")
异常处理类还可以使用@ResponseBody来修饰,将结果自动解析为json类型返回。
下面举一个例子:

import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;

@ControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 处理所有接口数据验证异常
     * @param e
     * @return
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    Object handleMethodArgumentNotValidException(HttpServletRequest req, MethodArgumentNotValidException e) {
        if (req.getMethod().equals("POST")) {
            return ApiResult.error(ExceptionCode.PARAMETER_WRONG, e.getMessage(), null);
        } else {
            ModelAndView mav = new ModelAndView("error");
            mav.addObject("exception", e);
            mav.addObject("url", req.getRequestURL());
            mav.setViewName("error");
            mav.addObject("reason", e.getMessage());
            return mav;
        }
    }
}

相关文章

网友评论

      本文标题:Spring的全局异常处理

      本文链接:https://www.haomeiwen.com/subject/mawdlctx.html