此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
异常
如果在请求映射期间发生异常或从请求处理程序(例如
一个@Controller
)、DispatcherServlet
委托到链HandlerExceptionResolver
bean 来解决异常并提供替代处理,这通常是
错误响应。
下表列出了可用的HandlerExceptionResolver
实现:
HandlerExceptionResolver |
描述 |
---|---|
|
异常类名称和错误视图名称之间的映射。对渲染很有用 浏览器应用程序中的错误页面。 |
解决 Spring MVC 引发的异常,并将它们映射到 HTTP 状态代码。
也可以看看替代 |
|
|
使用 |
|
通过调用 |
解析器链
您可以通过声明多个HandlerExceptionResolver
bean 并设置其order
属性。
order 属性越高,异常解析器的位置越晚。
合同HandlerExceptionResolver
指定它可以返回:
-
一个
ModelAndView
这指向一个错误的观点。 -
一个空的
ModelAndView
如果异常是在解析器中处理的。 -
null
如果异常仍未解决,则供后续解析器尝试,并且,如果 异常保留在最后,允许冒泡到 Servlet 容器。
MVC Config 自动为默认 Spring MVC 声明内置解析器
例外,对于@ResponseStatus
带注释的异常,并支持@ExceptionHandler
方法。您可以自定义该列表或替换它。
容器错误页面
如果异常仍未被任何HandlerExceptionResolver
因此,是,
left 传播,或者如果响应状态设置为错误状态(即 4xx、5xx),
Servlet 容器可以在 HTML 中呈现默认错误页面。自定义默认值
error 页面,您可以在web.xml
.
以下示例显示了如何执行此作:
<error-page>
<location>/error</location>
</error-page>
在前面的示例中,当异常冒泡或响应处于错误状态时,
Servlet 容器在容器内对配置的 URL 进行 ERROR 分派
(例如,/error
).然后由DispatcherServlet
,可能会映射它
设置为@Controller
,可以实现以返回带有模型的错误视图名称
或呈现 JSON 响应,如以下示例所示:
-
Java
-
Kotlin
@RestController
public class ErrorController {
@RequestMapping(path = "/error")
public Map<String, Object> handle(HttpServletRequest request) {
Map<String, Object> map = new HashMap<>();
map.put("status", request.getAttribute("jakarta.servlet.error.status_code"));
map.put("reason", request.getAttribute("jakarta.servlet.error.message"));
return map;
}
}
@RestController
class ErrorController {
@RequestMapping(path = ["/error"])
fun handle(request: HttpServletRequest): Map<String, Any> {
val map = HashMap<String, Any>()
map["status"] = request.getAttribute("jakarta.servlet.error.status_code")
map["reason"] = request.getAttribute("jakarta.servlet.error.message")
return map
}
}
Servlet API 不提供在 Java 中创建错误页面映射的方法。您可以
但是,请同时使用WebApplicationInitializer 和最小的web.xml . |