日常提交
This commit is contained in:
@@ -58,3 +58,36 @@ preHandle方法会返回一个boolean值,可以通过指定该方法的返回
|
||||
对于@ResponseBody或返回值为ResponseEntity的方法,postHandle不起作用,这些方法在HandlerAdapter中已经写入且提交了返回响应,时间位于postHandle之前。到postHandle方法执行时,已经无法再对响应做任何修改,如添加header也不再被允许。对于这些场景,可以**实现ResponseBodyAdvice或者声明一个ControllerAdvice**。
|
||||
#### afterCompletion
|
||||
调用时机位于DispaterServlet渲染view之后。
|
||||
### Exceptions
|
||||
如果异常在request mapping过程中被抛出或者从request handler中被抛出,DispatcherServlet会将改异常委托给HandlerExceptionResolver chain来处理,通常是返回一个异常响应。
|
||||
如下是可选的HandlerExceptionResolver实现类:
|
||||
1. SimpleMappingExceptionResolver:一个从exception class name到error view name的映射,用于渲染错误页面
|
||||
2. DefaultHandlerExceptionResolver:解析Spring MVC抛出的异常,并且将它们映射为Http状态码
|
||||
3. ResponseStatusExceptionResolver:通过@ResponseStatus注解来指定异常的状态码,并且将异常映射为Http状态码,状态码的值为@ResponseStatus注解指定的值
|
||||
4. ExceptionHandlerExceptionResolver:通过@Controller类内@ExceptionHandler方法或@ControllerAdvice类来解析异常
|
||||
#### Resolver Chain
|
||||
可以声明多个HandlerExceptionResolver bean对象来声明一个Exception Resolver链,并可以通过指定order属性来指定resolver chain中的顺序,order越大,resolver在链中的顺序越靠后。
|
||||
#### exception resolver的返回规范
|
||||
HandlerExceptionResolver返回值可以按照如下规范返回:
|
||||
- 一个指向ModelAndView的error view
|
||||
- 一个空的ModelAndView,代表异常已经在该Resolver中被处理
|
||||
- null,代表该exception仍未被解析,resolver chain中后续的resolver会继续尝试处理该exception,如果exception在chain的末尾仍然存在,该异常会被冒泡到servlet container中
|
||||
#### container error page
|
||||
如果exception直到resolver chain的最后都没有被解析,或者,response code被设置为错误的状态码(如4xx,5xx),servlet container会渲染一个默认的error html page。
|
||||
### 视图解析
|
||||
#### 处理
|
||||
类似于Exception Resolver,也可以声明一个view resolver chain,并且可以通过设置order属性来设置view resolver在resolver chain中的顺序。
|
||||
view resolver返回null时,代表该view无法被找到。
|
||||
#### 重定向
|
||||
以“redirect:”前缀开头的view name允许执行重定向,redirect:之后指定的是重定向的url。
|
||||
```shell
|
||||
# 重定向实例如下
|
||||
# 1. 基于servlet context重定向
|
||||
redirect:/myapp/some/resource
|
||||
# 2. 基于绝对路径进行重定向
|
||||
redirect:https://myhost.com/some/arbitrary/path
|
||||
```
|
||||
> 如果controller的方法用@ResponseStatus注解标识,该注解值的优先级**高于**RedirectView返回的response status。
|
||||
|
||||
#### 转发
|
||||
以“forward:”前缀开头的view name会被转发。
|
||||
|
||||
Reference in New Issue
Block a user