异常
@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
),也可以匹配顶级包装异常中的直接原因(例如,包装在 IllegalStateException
中的 IOException
)。
对于匹配的异常类型,最好将目标异常声明为方法参数,如前面的示例所示。或者,注释声明可以缩小异常类型以进行匹配。我们通常建议在参数签名中尽可能具体,并在 @ControllerAdvice
上声明您的主要根异常映射,并优先考虑相应的顺序。有关详细信息,请参阅 MVC 部分。
WebFlux 中的 @ExceptionHandler 方法支持与 @RequestMapping 方法相同的参数和返回值,除了请求主体和 @ModelAttribute 相关的参数之外。
|
Spring WebFlux 中对 @ExceptionHandler
方法的支持由 @RequestMapping
方法的 HandlerAdapter
提供。有关更多详细信息,请参阅 DispatcherHandler
。
方法参数
@ExceptionHandler
方法支持与 @RequestMapping
方法相同的 方法参数,但请求主体可能已被消耗。
返回值
@ExceptionHandler
方法支持与 @RequestMapping
方法相同的 返回值。