|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
异常
@Controller 和 @ControllerAdvice 类可以包含 @ExceptionHandler 方法,用于处理控制器方法抛出的异常。以下示例包含这样一个异常处理方法:
-
Java
-
Kotlin
@Controller
public class SimpleController {
// ...
@ExceptionHandler (1)
public ResponseEntity<String> handle(IOException ex) {
// ...
}
}
| 1 | 声明一个 @ExceptionHandler。 |
@Controller
class SimpleController {
// ...
@ExceptionHandler (1)
fun handle(ex: IOException): ResponseEntity<String> {
// ...
}
}
| 1 | 声明一个 @ExceptionHandler。 |
该异常可以匹配正在传播的顶层异常(即直接抛出的IOException),也可以匹配顶层包装异常中的直接原因(例如,被包装在IOException内部的IllegalStateException)。
为了匹配异常类型,建议将目标异常声明为方法参数,如上例所示。或者,也可以通过注解声明来缩小要匹配的异常类型范围。我们通常建议在方法参数签名中尽可能具体,并在使用相应顺序(order)进行优先级排序的 @ControllerAdvice 中声明主要的根异常映射。
详情请参见MVC 章节。
WebFlux 中的 @ExceptionHandler 方法支持与 @RequestMapping 方法相同的参数和返回值类型,但与请求体(request body)和 @ModelAttribute 相关的方法参数除外。 |
Spring WebFlux 对 @ExceptionHandler 方法的支持由用于 @RequestMapping 方法的 HandlerAdapter 提供。详见 DispatcherHandler 以获取更多详情。
方法参数
@ExceptionHandler 方法支持与 xref page 方法相同的方法参数,但请求体可能已被读取过了。
返回值
@ExceptionHandler 方法支持与 xref page 方法相同的返回值。