我们已经知道,创建一片文章需要向服务器提交一个POST /blogs
请求,那么更新呢?可能很快你会想到的是POST /blogs/{id}
。实际上,HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE,它们分别对应四种基本的操作,GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。我们完全可以设计一套URL用来表示博客文章(认为是一种资源)的增删改查操作(在前面已经提及):
GET /blogs
,获取所有博客文章POST /blogs
,创建一篇新博客文章GET /blogs/{id}
,获取一篇博客文章PUT /blogs/{id}
,更新一篇博客文章DELETE /blogs/{id}
,删除一篇文章现在我们已经了解如何发送GET
和POST
请求到服务器,浏览器的form
表单只支持GET
和POST
请求,而DELETE
和PUT
请求并不支持。为了解决这个问题,Spring MVC提供了一个HiddenHttpMethodFilter
,可以将带有_method
参数的POST
请求转换为PUT
或DELETE
请求。使用Spring Boot时,它已经被默认配置生效了。
通过HTML表单我们只能发送GET
和POST
请求
<!-- 发送put请求 -->
<form action="/blogs/1" method="post">
<input type="hidden" name="_method" value="put" >
<input type="submit" value="更新">
</form>
<!-- 发送delete请求 -->
<form action="/blogs/1" method="post">
<input type="hidden" name="_method" value="delete" >
<input type="submit" value="删除">
</form>
这样的POST
请求,经过HiddenHttpMethodFilter
的处理后,就会转化为PUT
和DELETE
请求被Spring MVC处理,匹配@PutMapping
和@DeleteMapping
。
需要注意的是,
_method
字段只是用于提示Spring MVC框架我们发送的请求应该作为什么方法来处理,所以将其设为hidden
,让用户不可见
登录发表评论 登录 注册
第11课的作业我本地都能执行成功,为什么提交了还是有问题呢?能帮我看下吗?
说的对,改过来了!
本课作业中的提示说「更新博客页面和新建博客页面可以共用同一个模板
item.html
」,这个地方应该是 create.html 吧?