表单提交RESTful风格——GET,POST,DELETE,PUT 4种方式处理源码

表单提交RESTful风格——GET,POST,DELETE,PUT 4种方式处理源码

在REST中,资源师通过URI来指定的,对资源的增删改查操作可以通过HTTP协议提供的GET\POST\PUT\DELETE等方法实现。

表单的请求只能是GET或者POST,而REST中的DELETE和PUT请求需要开启配置后再设置隐藏请求方式才能达到目的,我们在后续的学习工作中很少用到这种方式,后边大多是前后端分离项目,客户端发出的请求可以直接通过DELETE或者PUT去请求。

1. RESTful手动开启配置生效——application.properties

开启配置后,表单提交POST中含隐藏方法的会被拦截,拦截后读取POST提交表单中隐藏方法_method的值,不开启配置会直接按照POST请求处理。

spring.mvc.hiddenmethod.filter.enabled=true

在这里插入图片描述

2. 表单提交REST原理:

  1. 表单提交会带上_method=PUT
  2. 请求过来被HiddenHttpMethodFilter拦截。
  3. POST请求,并且请求是正常。
  4. 获取到_method的值。
  5. 兼容以下请求;PUT、DELETE、PATCH
  6. 原生request (post),包装模式requesWrapper重写了getMethod方法,返回的是传入的值,
  7. 过滤器链放行的时候用wrapper。以后的方法调用getMethod是调用requesWrapper的_method值。

3. REST使用客户端工具:

  • 如PostMan直接发送Put、delete等方式请求,无需Filter。所以也无需开启配置。

4. 源码查看小技巧

4.1 CTRL+H——类的层次结构

在选中所需要查看层次结构类的前提下,按快捷键: CTRL+H,可以进行查看。
在这里插入图片描述

4.2 CTRL+ALT+U——类的继承和实现关系图

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

在这里插入图片描述

5. 测试

创建一个SpringBoot项目,用表单和PostMan两种方式去请求接口测试

  1. 引入相关依赖——pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot-REST</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  1. 核心配置 ——application.properties
spring.mvc.hiddenmethod.filter.enabled=true
  1. 控制层——UserController.java
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;
    }
}
  1. 创建首页index.html
    首页默认放在resources→static下
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</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>
  1. 启动程序
    在这里插入图片描述

5.1 表单提交REST测试

RESTful手动开启配置

spring.mvc.hiddenmethod.filter.enabled=true

首页:http://localhost:8080/

在这里插入图片描述
1.点击第一个GET提交表单
在这里插入图片描述
2.点击第二个POST提交表单
在这里插入图片描述

3.点击第三个DELETE提交表单
在这里插入图片描述

4.点击第四个PUT提交表单
在这里插入图片描述

在这里插入图片描述

5.2 客户端PostMan测试

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

spring.mvc.hiddenmethod.filter.enabled=false

关闭后POST表单中的隐藏DELETE和PUT请求直接走POST请求 2 了在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在设计Django框架的RESTful API接口时,我们需要考虑以下几个方面: 1. URL设计 2. 请求方法的选择 3. 数据的序列化和反序列化 4. 异常处理 下面我们将逐一介绍这些方面的设计。 1. URL设计 RESTful API接口的URL设计应该遵循一定的规范。一般而言,我们可以将URL按照以下的方式进行设计: ``` http(s)://host:port/api/{version}/{resource}/{resource_id}/ ``` 其中,`version`表示API版本,`resource`表示资源,`resource_id`表示资源的唯一标识符。例如: ``` http://localhost:8000/api/v1/users/1/ ``` 表示获取ID为1的用户信息。 2. 请求方法的选择 RESTful API接口支持以下四请求方法: - GET:获取资源 - POST:创建资源 - PUT:更新资源 - DELETE:删除资源 这四请求方法对应着CRUD操作中的"读取"、"创建"、"更新"和"删除"。 3. 数据的序列化和反序列化 在RESTful API中,数据的序列化和反序列化是非常重要的。序列化是将Python对象转换为JSON或XML等格式的过程,而反序列化则是将JSON或XML等格式的数据转换为Python对象的过程。 Django框架提供了一些强大的序列化工具,例如`django-rest-framework`。我们可以使用这些工具来实现数据的序列化和反序列化。 4. 异常处理RESTful API接口的设计中,异常处理也是非常重要的。我们需要对可能出现的异常进行处理,并返回适当的错误信息。 在Django框架中,我们可以使用`try...except`语句来捕获异常,并使用`HttpResponse`对象返回错误信息。例如: ```python from django.http import HttpResponse def my_view(request): try: # some code here except: return HttpResponse('Error occurred', status=500) ``` 以上是Django框架RESTful API接口设计的基本要素,通过合理的设计可以实现一个高效、易用的API接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

848698119

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值