实现介绍
SpringBoot中@ControllerAdvice与@ExceptionHandler的配合使用,可以实现controller层的异常处理功能
实现代码
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseBody
@ExceptionHandler(Exception.class)
public Result exception(Exception e){
log.error(e.getMessage());
e.printStackTrace();
return Result.error().code(ResultCode.INTERNAL_ERROR.getCode()).message(ResultCode.INTERNAL_ERROR.getMessage());
}
@ResponseBody
@ExceptionHandler(SystemException.class)
public Result systemException(SystemException e){
log.error(e.getMessage());
e.printStackTrace();
return Result.error().code(e.getCode()).message(e.getMessage());
}
}
注解解释
@ExceptionHandler
@ExceptionHandler可以捕获到controller中指定的异常并进行处理
-
写在普通的controller中:只能识别并处理该controller中的指定异常
-
写在@ControllerAdvice注解的类中:可以识别并处理所有@ControllerAdvice覆盖的controller(默认是覆盖所有)中的指定异常
@ControllerAdvice
@ControllerAdvice默认是覆盖所有controller,但也可以通过设置只覆盖指定的controller
- 只想让@ControllerAdvice覆盖指定的包
@ControllerAdvice("com.wq.property")
- 只想让@ControllerAdvice覆盖指定的controller类
@ControllerAdvice(basePackageClasses = ArchivesOwnerInfoImportController.class)
- 想让@ControllerAdvice覆盖指定的几个controller类
@ControllerAdvice(assignableTypes ={ArchivesOwnerInfoImportController.class, ArchivesOwnerInfoSummaryController.class})