异常

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