|
对于最新稳定版本,请使用Spring Framework 7.0.1! |
异常
如果异常发生在请求映射过程中或请求处理程序抛出(例如
一个@Controller),调度器服务代表链HandlerExceptionResolverBeans 以解决异常并提供替代处理,通常为
错误回复。
下表列出了可用的HandlerExceptionResolver实现:
HandlerExceptionResolver |
描述 |
|---|---|
|
异常类名称与错误视图名称之间的映射。对渲染非常有用 浏览器应用中的错误页面。 |
解决 Spring MVC 提出的异常,并将其映射到 HTTP 状态码。
另见替代方案 |
|
|
通过 |
|
通过调用 |
解决链
你可以通过声明多个来形成异常解析链HandlerExceptionResolver在你的春季配置中,并设置它们次序根据需要进行属性。
阶数越高,异常解析器的定位时间越晚。
合同HandlerExceptionResolver指定它可以返回:
-
一个
模型与视图这表明存在错误观点。 -
一个空洞
模型与视图如果异常在解析器内被处理。 -
零如果异常未解决,后续解析器将尝试,且 例外仍在末尾,允许它冒泡至Servlet容器。
MVC 配置会自动声明默认 Spring MVC 的内置解析器
例外情况,对于@ResponseStatus注释例外,以及支持的@ExceptionHandler方法。你可以自定义那个列表,也可以替换它。
容器错误页面
如果异常未被任何HandlerExceptionResolver因此,且
留给传播,或者如果响应状态设置为错误状态(即4xx、5xx),
Servlet 容器可以渲染默认的错误页面。自定义默认
容器的错误页面,你可以声明错误页面映射web.xml.
以下示例展示了如何实现:
<error-page>
<location>/error</location>
</error-page>
鉴于上述例子,当异常出现或响应出现错误状态时,
Servlet 容器在容器内对配置的 URL 发送 ERROR
(例如,/错误).然后由调度器服务,可能正在映射它
转给@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 中创建错误页面映射的方法。您可以
但同时使用A。WebApplicationInitializer以及一个极小web.xml. |