在REST中,资源师通过URI来指定的,对资源的增删改查操作可以通过HTTP协议提供的GET\POST\PUT\DELETE等方法实现。
表单的请求只能是GET或者POST,而REST中的DELETE和PUT请求需要开启配置后再设置隐藏请求方式才能达到目的,我们在后续的学习工作中很少用到这种方式,后边大多是前后端分离项目,客户端发出的请求可以直接通过DELETE或者PUT去请求。
开启配置后,表单提交POST中含隐藏方法的会被拦截,拦截后读取POST提交表单中隐藏方法_method的值,不开启配置会直接按照POST请求处理。
spring.mvc.hiddenmethod.filter.enabled=true

在选中所需要查看层次结构类的前提下,按快捷键: CTRL+H,可以进行查看。

在选中所需要查看层次结构类的前提下,按快捷键: CTRL+ALT+U 或 CTRL+ALT+SHIFT+U,可以进行查看继承类和实现接口的关系图。

创建一个SpringBoot项目,用表单和PostMan两种方式去请求接口测试
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.7.3version>
<relativePath/>
parent>
<groupId>com.examplegroupId>
<artifactId>springboot-RESTartifactId>
<version>0.0.1-SNAPSHOTversion>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
spring.mvc.hiddenmethod.filter.enabled=true
package com.guo.springboot.controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@RestController
public class UserController {
@GetMapping("/user")
public String getUser(HttpServletRequest request){
String username = request.getParameter("username");
return "1"+username;
}
@PostMapping("/user")
public String postUser(String username){
return "2"+username;
}
@DeleteMapping("/user")
public String deleteUser(String username){
return "3"+username;
}
@PutMapping("/user")
public String putUser(String username){
return "4"+ username;
}
}
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>indextitle>
head>
<body>
<h1>测试表单提交REST的四种请求h1>
<form action="/user" method="get">
<input name="username" value="REST-GET" type="submit">
form>
<form action="/user" method="post">
<input name="username" value="REST-POST" type="submit">
form>
<form action="/user" method="post">
<input type="hidden" name="_method" value="delete" >
<input name="username" value="REST-DELETE" type="submit">
form>
<form action="/user" method="post">
<input type="hidden" name="_method" value="put" >
<input name="username" value="REST-PUT" type="submit">
form>
body>
html>

RESTful手动开启配置
spring.mvc.hiddenmethod.filter.enabled=true
首页:http://localhost:8080/

1.点击第一个GET提交表单

2.点击第二个POST提交表单

3.点击第三个DELETE提交表单

4.点击第四个PUT提交表单


RESTful手动关闭配置(默认就是关闭的,这里可以直接删除这条配置),这里的开启和关闭只会影响表单的提交DELETE和PUT请求,这两种请求是放在POST请求表单中的隐藏方法中,开启配置的时候请求拦截POST请求,读取隐藏的方法,把隐藏的方法替代POST请求,进而达到“偷梁换柱”的目的;
而关闭配置就默认按照POST请求发起请求。
spring.mvc.hiddenmethod.filter.enabled=false
关闭后POST表单中的隐藏DELETE和PUT请求直接走POST请求 2 了




