资讯专栏INFORMATION COLUMN

GET,POST与后端接口详记

miguel.jiang / 753人阅读

摘要:如,是类的传输方式,与没有实质区别。是测试服务器的该资源情况,不返回实体的主体部分。请求可以获取回服务器接收到的该请求的原始报文,从而判断路径中的代理和防火墙是否对该条请求进行修改。为了获取信息且不需要传大量条件信息的接口。

前言 HTTP通信的7种方式

在HTTP通信中主要分为GET和POST。如PUT,DELETE是类POST的传输方式,与POST没有实质区别。OPTION是查看服务器支持的请求方法。HEAD是测试服务器的该资源情况,不返回实体的主体部分。TRACE请求可以获取回服务器接收到的该请求的原始报文,从而判断路径中的代理和防火墙是否对该条请求进行修改。

HTTP请求报文发送格式不因请求方式不同而改变

HTTP报文格式如下

<请求方法> <请求路径> <协议版本>
<请求头>

<主体body>

无论用任何请求方法,都可以发送这样的请求报文,报文结构是HTTP的协议规范,请求方法只是告诉服务器如何来看待这条请求。因为在有些文章中会提到GET请求不能传body数据,而真实的情况是有些服务端框架接收到GET请求后会自动将GET请求的body部分丢弃,所以大家要注意。所以为了规范,大家在使用GET请求时还是不要将请求数据放在body中。

何时用GET请求

为了规范,使用GET请求时就不要在主体body中放数据了,避免不必要的错误。所以请求中的数据是放在URL上的。

浏览器网址栏和页面跳转。

为了获取信息且不需要传大量条件信息的接口。

例如用GET做登录请求

GET /online/test/?name=haha& password=miaomiao HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: application/x-www-form-urlencoded
cache-control: no-cache
Postman-Token: 14a1347a-c540-48f0-9d49-6299f86c3a73
何时用POST请求

post请求可以在body中传送大量信息

以上传name=haha,password=miaomiao为例,查看不同body数据格式

form-data(表单,可以传文件)
POST /online/test/? HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
cache-control: no-cache
Postman-Token: c6e21725-caec-4a40-841c-7b92f87f6999

Content-Disposition: form-data; name="name"

haha

Content-Disposition: form-data; name="password"

miaomiao
------WebKitFormBoundary7MA4YWxkTrZu0gW--

若在表单中附加一张图片

POST /online/test/? HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
cache-control: no-cache
Postman-Token: 437207ba-e007-4de8-bbcd-bdc88db6e445

Content-Disposition: form-data; name="name"

haha

Content-Disposition: form-data; name="password"

miaomiao

Content-Disposition: form-data; name="profile"; filename="C:UsersThinkPicturesprofile.jpg


------WebKitFormBoundary7MA4YWxkTrZu0gW--

其中表单的每一项都有Content-Disposition描述。

------WebKitFormBoundary7MA4YWxkTrZu0gW--是随机生成的分隔标记

x-www-form-urlencoded(也是表单,但不可以传文件)
POST /online/test/? HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: application/x-www-form-urlencoded
cache-control: no-cache
Postman-Token: 35566466-0568-4731-9c1c-6eda7dfca105
name=hahapassword=miaomiaoundefined=undefined

因为不用传文件,所以不用多带带描述,将表单信息拼凑在一起就可以了。

application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。

multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。

raw(text,json,xml...)(其它文本格式)

以json格式为例

POST /online/test/? HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: application/json
cache-control: no-cache
Postman-Token: 06a9f071-4424-428a-b17b-9b4fe6f209a2
{
    "name":"haha",
    "password":"miaomiao"
}------WebKitFormBoundary7MA4YWxkTrZu0gW--
binary(二进制)

用作传输文件,包括前面的form-data上传文件,文件都是以一定的编码方式写在body中的,在服务器端获取该请求的输入流后,即可按行接收流中的数据信息。

在Spring Boot中接口的接收数据总结 URL接收

GET参数列表对于数字基本类型和包装类型都可接收,但是若前端并没传这个数字,那么包装类型可以在代码里判空,异常处理就好,但是基本类型是不能判空的,所以对于数字首选包装类型。

    @RequestMapping(value = "/",method = RequestMethod.GET)
    @ResponseBody
    private ResInfo test(String name,String password){

        return new ResInfo(200,"登录成功: "+name+" "+password);
    }

PostMan接收

{
    "code": 200,
    "msg": "登录成功: haha miaomiao"
}
表单数据

两种表单的请求Java接口都可以这样写。

    @RequestMapping(value = "/",method = RequestMethod.POST)
    @ResponseBody
    private ResInfo test(String name,String password){

        return new ResInfo(200,"登录成功: "+name+" "+password);

    }

若表单中要上传文件,则文件项该用注解写名称,参数名都可用@RequestParam替代。只有form-data可以接收文件。

    @RequestMapping(value = "/",method = RequestMethod.POST)
    @ResponseBody
    private ResInfo test(String name,String password,@RequestParam("profile") MultipartFile multipartFile){

        String fileName = multipartFile.getOriginalFilename();
        return new ResInfo(200,"登录成功: "+name+" "+password+"文件名:"+fileName);

    }

Postman响应

{
    "code": 200,
    "msg": "登录成功: haha miaomiao文件名:profile.jpg"
}
接收json对象
    class User   {
        public String name;
        public String password;

        public User() {

        }
       //若重写了构造方法,一定要写上空构造方法,否则spring不能new新对象以接收json
        public User(String name, String password) {
            this.name = name;
            this.password = password;
        }
    }
    @RequestMapping(value = "/", method = RequestMethod.POST)
    @ResponseBody
    private ResInfo test(@RequestBody User user) {

        return new ResInfo(200, "登录成功: " + user.name + " " + user.password);
    }

Postman响应

{
    "code": 200,
    "msg": "登录成功: haha miaomiao"
}
json对象和单个值混合接收

思想:把json对象放在body中,把单个值放在url参数列表中,所以构造请求时url和body两部分都要构造。

@RequestMapping(value = "/", method = RequestMethod.POST)
    @ResponseBody
    private ResInfo test(@RequestBody User user, String msg) {

        return new ResInfo(200, "登录成功: " + user.name + " " + user.password +
                "msg:" + msg);
    }

Postman响应

{
    "code": 200,
    "msg": "登录成功: haha miaomiaomsg:hello, my name is msg !"
}

至此完成了从HTTP构造到spring对接口解析的总结与梳理,欢迎大家指正。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75130.html

相关文章

  • 前端开发如何做好本地接口模拟

    摘要:前端开发如何做好本地接口模拟之前有写过一篇本地化接口模拟前后端并行开发,讲到过本地接口模拟,但不太细致。有哪些途径本地接口模拟一般分为工具层面和代码层面。因为本地接口模拟功能主要是针对的返回值为格式的异步请求,所以这种方式主要用文件。 前端开发如何做好本地接口模拟 之前有写过一篇 本地化接口模拟、前后端并行开发,讲到过本地接口模拟,但不太细致。这次细细的说说本地接口模拟。 1. 有什么...

    ACb0y 评论0 收藏0
  • 迈出全栈第一步,vue+node+mysql独立完成前后端分离的增删改查流程

    摘要:本使用创建本地服务器,在就能完成全部流程,并不需要线上服务器。路径要与后端接口一致。后端返回成功后,前端数据中对应的元素也要删掉,更新视图。控制器里拿一个方法出来说一下吧,完整的代码都在。读取操作完成后调用释放连接。 写在前面 本文只是本人学习过程的一个记录,并不是什么非常严谨的教程,希望和大家一起共同进步。也希望大家能指出我的问题。适合有一定基础,志在全栈的前端初学者学习,从点击按钮...

    fsmStudy 评论0 收藏0
  • 使用JWT(Json Web Token)实现登录认证

    摘要:今天我们来结合实例给大家讲述的实战应用,就是如何使用前端与后端实现用户登录鉴权认证的过程。只用了一个串,建立前后端的验证的数据传递,实现了有效的登录鉴权过程。 今天我们来结合实例给大家讲述JWT(Json Web Token)的实战应用,就是如何使用前端Axios与后端PHP实现用户登录鉴权认证的过程。 文中涉及的重要知识点: axios异步请求:axios-基于Promise的HTT...

    Yu_Huang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<