Spring Boot 解析表单的Rest风格:
通过post方式进入,判断是否又隐藏的、名为_method 的表单,有的话读取其中的value 再来区分是Delete 还是 Put。
if ("POST".equals(request.getMethod()) && request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) == null) {
String paramValue = request.getParameter(this.methodParam);
if (StringUtils.hasLength(paramValue)) {
String method = paramValue.toUpperCase(Locale.ENGLISH);
if (ALLOWED_METHODS.contains(method)) {
requestToUse = new HttpMethodRequestWrapper(request, method);
}
}
}
Spring Boot 自动配置了默认的RequestMappingHandlerMapping 里面保存了所有 @RequestMapping 和 handler的映射规则。
请求进来,挨个尝试所有的HandlerMapping 看是否有请求信息可以匹配到处理器。
如果有,就找到这个请求对应的handler
如果没有就是下一个HandlerMapping
@PathVariable 可接收基础类型和map类型的路径变量
@RequestHeader 可以用String 类型或者Map类型接收请求头的信息。当用String 类型接收单个的请求头信息时,需要在注解中指定要接收信息的key。
@RequestParam 同上
@RequestBody 可以用自定义的JavaBean接收传过来的参数
@MatrixVariable 矩阵变量。
使用矩阵变量的前提:SpringBoot 自动禁用了矩阵变量的功能(原理是:开启了删除请求路径中分号和分号以后的内容,而矩阵变量的实质就是路径变量 + ; + k=v 的结构),要处理这个问题需要自己手动开启UrlPathHelper中 removeSemicolonContent 中开启的移除分号的内容。
强调:矩阵变量必须要有url路径变量,不能直接写死!可以通过不同的路径变量名称来取同样参数名字的参数。
使用场景:当Cookie被禁用时,可以将jsessionId放到矩阵变量中完成对cookie的传递。