网站编辑楼盘详情页怎么做,o2o平台有哪些国内,汉阳网站建设,新手做网站看什么书一、RESTFUL简介
Rest风格支持#xff08;使用HTTP请求方式#xff0c;动词来表示对资源的操作#xff09; 以前#xff1a;/getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户 现在#xff1a; /user GET-获取用户 DELETE-删除用户 PUT-修改…一、RESTFUL简介
Rest风格支持使用HTTP请求方式动词来表示对资源的操作 以前/getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户 现在 /user GET-获取用户 DELETE-删除用户 PUT-修改用户 POST-保存用户
可以简单理解为请求接口的路径就1个但是提交请求时多了一个参数从而定位到后端的具体接口。
二、案例
controller接口 RequestMapping(value /user,method RequestMethod.GET)public String getUser(){return GET-张三;}RequestMapping(value /user,method RequestMethod.POST)public String saveUser(){return POST-张三;}RequestMapping(value /user,method RequestMethod.PUT)public String putUser(){return PUT-张三;}RequestMapping(value /user,method RequestMethod.DELETE)public String deleteUser(){return DELETE-张三;}form表单请求 用法 对于put、delete、patch类型请求表单methodpost隐藏域 _methodput
form action/user methodgetinput valueREST-GET 提交 typesubmit/
/form
form action/user methodpostinput valueREST-POST 提交 typesubmit/
/form
form action/user methodpostinput name_method typehidden valuedelete/input valueREST-DELETE 提交 typesubmit/
/form
form action/user methodpostinput name_method typehidden valuePUT/input valueREST-PUT 提交 typesubmit/
/formyml开启配置
spring:mvc:hiddenmethod:filter:enabled: true三、源码解读
我们知道springboot的接接口入口是DispatcherServlet类。 web请求的自动配置类是WebMvcAutoConfiguration。 那么springboot是复合区分不同类型的请求了 我们看下WebMvcAutoConfiguration配置类信息 有个条件装配HiddenHttpMethodFilter。而filter的优先级是高于servlet接口的。 所以请求来了会先进入filter处理。
具体位置 org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration#hiddenHttpMethodFilter org.springframework.web.filter.HiddenHttpMethodFilter#doFilterInternal 主要处理逻辑代码 代码解释 put、delete、patch必须以post form表单的影藏参数传到后端才能正常处理。 this.methodParam ALLOWED_METHODS
四、扩展
我们注意到this.methodParam变量 它提供了对应的set方法所以我们可以修改这个值来将影藏参数改成自己喜欢的样子。
此时需要借助配置类向IOC容器中注册一个HiddenHttpMethodFilter并set我们自定义的值。 来覆盖springboot自动装配的Bean实例。 Beanpublic HiddenHttpMethodFilter hiddenHttpMethodFilter(){HiddenHttpMethodFilter methodFilter new HiddenHttpMethodFilter();methodFilter.setMethodParam(_hiddenParam);return methodFilter;}我们注意到源码的一个判断逻辑 POST.equals(request.getMethod()) 那么如果form表单提交的methodput、delete、patch是不是就直接放行了呢 实际上是不行的html的form表单的method属性值只有get和post两个值可选择 比如你给method赋值put后端会当做get请求处理。
另外如果我们用Postman客户端工具发送put请求那么就可以直接放行。 客户端工具直接修改了request.getMethod()的值。