实例
/**
* 全局控制器异常处理类
*/
@ControllerAdvice
public class GlobalExceptionResolver {
/**
* 处理所有不可知异常
*
* @param e 异常
* @return json结果
*/
@ExceptionHandler(Exception.class)
@ResponseBody
public ApiResult handleException(Exception e) {
return ApiResult.of(ResultCode.UNKNOWN_ERROR);
}
/**
* 处理所有业务异常
*
*/
@ExceptionHandler(BusinessRuntimeException.class)
@ResponseBody
public ApiResult handleOpdRuntimeException(BusinessRuntimeException e) {
return ApiResult.of(e.getResultCode());
}
}
@RestControllerAdvice
public class ControllerExceptionHandler {
@ExceptionHandler(Exception.class)
public JsonResult handleControllerException(HttpServletRequest req, Exception ex) {
return JsonResult.defaultError();
}
}
笔记
- @ControllerAdvice注解用在类上,是Spring MVC 3.2提供的新注解,它全局范围内为应用内所有控制器中被@RequestMapping注解的方法增加一些逻辑处理。
- @ControllerAdvice中可以在方法中使用三个注解:@ExceptionHandler、@InitBinder、@ModelAttribute。
- @RestController注解相当于@ResponseBody + @Controller合在一起的作用,如果只是使用@RestController注解控制器,则控制器中的方法无法返回JSP页面(配置的视图解析器InternalResourceViewResolver不起作用)。
- @RestControllerAdvice 与 @ControllerAdvice 类似,相当于 @ResponseBody + @ControllerAdvice合在一起的作用。