对于最新的稳定版本,请使用 Spring Framework 7.0.6!spring-doc.cadn.net.cn

异常

@Controller@ControllerAdvice 类可以包含 @ExceptionHandler 方法来处理控制器方法中的异常。以下示例包含了一个这样的处理器方法:spring-doc.cadn.net.cn

@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 中)。spring-doc.cadn.net.cn

对于匹配的异常类型,最好将目标异常声明为方法参数,如前面的例子所示。或者,注解声明可以缩小匹配的异常类型。我们通常建议在参数签名中尽可能具体,并将主要根异常映射声明为优先级@ControllerAdvice,并设置相应的顺序。 请参见MVC部分以获取详细信息。spring-doc.cadn.net.cn

An @ExceptionHandler 方法在 WebFlux 中支持与 @RequestMapping 方法相同的参数和返回值,但不包括与请求正文和 @ModelAttribute 相关的参数。

Spring WebFlux 中对 @ExceptionHandler 方法的支持由 HandlerAdapter@RequestMapping 方法提供。有关详细信息,请参阅 DispatcherHandlerspring-doc.cadn.net.cn

方法参数

@ExceptionHandler个方法支持与@RequestMapping个方法相同的方法参数,但请求体可能已被消耗。spring-doc.cadn.net.cn

返回值

@ExceptionHandler个方法支持与@RequestMapping个方法相同的返回值spring-doc.cadn.net.cn