异常
@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
方法相同的返回值。