日常提交

This commit is contained in:
wu xiangkai
2022-11-18 11:05:50 +08:00
parent c32dd7ead5
commit bc069d1211

View File

@@ -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会被转发。