@ControllerAdvice
spring3.2版本后提供的一个controller增强注解,在进行Class扫描时能够自动扫描到它,通常用于定义@ExceptionHandler, @InitBinder和@ModelAttribute ,适用于所有@RequestMapping方法的方法。
@RestControllerAdvice
@ControllerAdvice+@ResponseBody
@ExceptionHandler
用于拦截异常,统一捕获处理
@RestControllerAdvice
public class ExceptionResolver{
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler({MethodArgumentNotValidException.class, BindException.class})
public Result validatorException(Throwable e)
{
//参数异常捕获处理
}
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler({SQLException.class, DataAccessException.class})
public Result databaseException(Throwable e)
{
//数据库异常捕获处理
}
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler({NoHandlerFoundException.class})
public Result apiNotFound(Throwable e, HttpServletRequest request)
{
//接口不存在
}
@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
@ExceptionHandler({HttpRequestMethodNotSupportedException.class})
public Result methodNotSupport(Throwable e)
{
//请求方法不允许
}
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler({Exception.class})
public Result globalException(HttpServletRequest request, Throwable e)
{
//全局异常
}如上例子,我们定义了Exception处理方法和其他子类异常处理方法,当异常发生时,Spring会选择最接近抛出异常的处理方法,即假如发生了SQLException,那会优先调用databaseException方法。
版权声明:本文为wjlzx原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。