常见的异常处理除了一般的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;
}
}
}
网友评论