参考
一、全局异常处理
代码示例
1 | import org.springframework.http.HttpStatus; |
@RestControllerAdvice 相关设置
优先级设置:存在多个处理器时,使用@Order
注解,设置处理器类优先级,例如@Order(Ordered.HIGHEST_PRECEDENCE)
。
范围设置: 存在多个处理器,例如全局处理器和多个局部处理器时,应当妥善设置范围,避免出现多个处理器同时处理同一个请求。
- 指定包范围:
basePackages
: 指定一个或多个包,这些包及其子包下的所有 Controller 都被管理。@RestControllerAdvice(“com.example.controller")
// 只管理 com.example.controller 包及其子包下的所有 Controller@RestControllerAdvice(basePackages={"com.example.controller","com.example.controller2"})
// 只管理 com.example.controller 包及其子包下的所有 Controller 和 com.example.controller2 包及其子包下的所有 Controller- 指定
@RestControllerAdvice(basePackageClasses={Controller1.class,Controller2.class})
是 basePackages 的一种变形,指定一个或多个 Controller 类,这些类所属的包及其子包下的所有 Controller 都被管理
- 指定类:
assignableTypes
指定一个或多个 Controller 类,这些类被管理 - 指定注解:
annotations
指定一个或多个注解,被这些注解所标记的 Controller 会被管理
处理404错误
即使我们配置了全局异常处理,当出现404 not found等4xx错误时,依然会出现意外情况:
1 | { |
解决方法:
在application.yml
配置文件增加以下配置项:
1 | # 当HTTP状态码为4xx时直接抛出异常 |
现在当我们再次请求一个不存在的接口时,404的话控制台会报NoHandlerFoundException异常,然后被全局异常处理捕获到并统一返回。