Restful风格请求 后端接口参数接收详解

这篇具有很好参考价值的文章主要介绍了Restful风格请求 后端接口参数接收详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一丶Restful风格的常用四种请求方式

1、GET [select]  

2、PUT [update]

3、POST [inser]

4、DELETE [delete]

二丶SpringBoot后端接口请求参数映射方式详解

1.映射基本类型参数 

2.映射对象类型参数

3.1 映射数组

3.2 映射Collection

3.3 映射List

3.4 映射Set

2.映射数组、集合类型参数

2.1 映射数组

2.2 映射Collection

2.3 映射List

2.4 映射Set

表单参数方式

1.映射基本类型参数

2.映射对象类型参数

3.映射数组、集合类型参数

3.1 映射数组

3.2 映射Collection

3.3 映射List

3.4 映射Set

FormData方式

请求体json方式


一丶Restful风格的常用四种请求方式

1、GET [select]  

请求会向数据库发索取数据的请求,从而来获取信息,其只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容。无论进行多少次操作,结果都是一样的。

2、PUT [update]

  请求是向服务器端发送数据的,从而改变信息,其用来修改数据的内容,但是不会增加数据的种类等,无论进行多少次PUT操作,其结果并没有不同。

3、POST [inser]

请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源.几乎目前所有的提交操作都是用POST请求的。

4、DELETE [delete]

请求是用来删除某一个资源的。

POST主要作用在一个集合资源之上的(url),而PUT主要作用在一个具体资源之上的(url/xxx).如URL可以在客户端确定,那么可使用PUT,否则用POST。

一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。


二丶SpringBoot后端接口请求参数映射方式详解

 在SpringBoot项目中,前端HTTP请求中的参数如何映射到Controller层的接口方法中的参数?这里针对各种方式做一个测试与总结,测试采用的SpringBoot版本号为2.2.10.RELEASE

QueryString参数传递的方式为,在请求URL中直接拼接请求参数,如URL?param1=value1&param2=value2

QueryString参数传递方式对于请求方法GETPOSTPUTPATCHDELETE都适用

1.映射基本类型参数 

可以在Controller的接口中声明基本类型的参数,然后用@RequestParam注解修饰,指定前端传递的参数名称 

@RestController
@RequestMapping("param")
@Slf4j
public class RequestParamTestController {
    @RequestMapping("queryString1")
    public void testQueryString1(@RequestParam("name") String name, @RequestParam("age") Integer age) {
        log.info("name:{}   age:{}", name, age);
    }
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

如果请求参数名称和Controller中接口方法的参数名称一致,那么可以省略@RequestParam注解。不过一般还是建议加上

当请求参数名称和Controller中接口方法的参数名称一致时,加与不加@RequestParam的区别是:

加上@RequestParam,其属性required默认为true,那么当前端不传递对应的参数时将会抛出异常

restful接口参数接收,restful,java,后端,spring boot,postman

不加@RequestParam,前端可以不传递对应参数,此时Controller接口方法中的参数接收到的值为null

restful接口参数接收,restful,java,后端,spring boot,postman

2.映射对象类型参数

定义一个对象,属性名称和前端传递的参数名称一致即可

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private Integer age;
}

然后将Controller接口方法中的参数声明为自定义对象 

@RequestMapping("queryString2")
public void testQueryString2(User user) {
    log.info("name:{}   age:{}", user.getName(), user.getAge());
}

 测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

3.映射数组、集合类型参数

前端有2种方式针对同一个参数传递多个值:

在请求的QueryString中,拼接多个参数名称一样的参数即可,如URL?param=value1&param=value2&param=value3
在请求的QueryString中,对同一个参数赋多个值,多个值之间用,隔开,如URL?param=value1,value2,value3


3.1 映射数组

在Controller接口方法中声明数组类型参数,用@RequestParam指明前端传递的参数名称即可

@RequestMapping("queryString3")
public void testQueryString3(@RequestParam("name") String[] nameArray) {
    if (nameArray != null) {
        for (String name : nameArray) {
            log.info(name);
        }
    }
}

 测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

restful接口参数接收,restful,java,后端,spring boot,postman

如果请求参数名称和Controller中接口方法的参数名称一致,那么可以省略@RequestParam注解。不过一般还是建议加上 

3.2 映射Collection

在Controller接口方法中声明Collection类型参数,用@RequestParam指明前端传递的参数名称即可

@RequestMapping("queryString4")
public void testQueryString4(@RequestParam("name") Collection<String> nameCollection) {
    if (nameCollection != null) {
        log.info("类型:{}", nameCollection.getClass());
        for (String name : nameCollection) {
            log.info(name);
        }
    }
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

可以发现框架默认采用的实现类是LinkedHashSet。那我们继续测试传递相同value的时候是否也会采用这个实现

restful接口参数接收,restful,java,后端,spring boot,postman

可以发现传递多个相同value的时候框架采用的实现类还是LinkedHashSet,所以有去重的效果

3.3 映射List

在Controller接口方法中声明List类型参数,用@RequestParam指明前端传递的参数名称即可

@RequestMapping("queryString5")
public void testQueryString5(@RequestParam("name") List<String> nameList) {
    if (nameList != null) {
        log.info("类型:{}", nameList.getClass());
        for (String name : nameList) {
            log.info(name);
        }
    }
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

可以发现框架默认采用的实现类是ArrayList

3.4 映射Set

在Controller接口方法中声明Set类型参数,用@RequestParam指明前端传递的参数名称即可

@RequestMapping("queryString6")
public void testQueryString6(@RequestParam("name") Set<String> nameSet) {
    if (nameSet != null) {
        log.info("类型:{}", nameSet.getClass());
        for (String name : nameSet) {
            log.info(name);
        }
    }
}

 测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

可以发现框架默认采用的实现类是LinkedHashSet,与声明为Collection类型时一致

注意:

也可以在自定义对象中将属性声明为数组、集合类型,来接收多个值

restful接口参数接收,restful,java,后端,spring boot,postman
对于映射CollectionList和Set类型参数时,即便前端提交的QueryString中的参数名称与Controller接口方法的参数名称一致,也不能省略@RequestParam注解,否则会抛出如下异常

restful接口参数接收,restful,java,后端,spring boot,postman

路径参数方式

路径传参方式是将参数直接包含在URL路径中,比如URL/paramValue1/paramValue2

路径参数方式对于请求方法GETPOSTPUTPATCHDELETE都适用

1.映射基本类型参数
在Controller中用如下步骤接收参数:

1.在接口对应的请求路径中用{参数名}形式标出路径参数
2.在接口方法的参数上标注@PathVariable指名对应路径参数的参数名

@RequestMapping("path1/{name}/{age}")
public void testPath1(@PathVariable("name") String name, @PathVariable("age") Integer age) {
    log.info("name:{}   age:{}", name, age);
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

如果接口方法上@RequestMapping中路径参数的参数名称和接口方法的参数名称相同,可以省略@PathVariable注解。但一般推荐加上

2.映射数组、集合类型参数

直接给路径参数多个值,用,隔开即可

2.1 映射数组

在Controller接口方法中声明数组类型参数,用@PathVariable指明路径参数的名称即可
 

@RequestMapping("path2/{name}/{age}")
public void testPath2(@PathVariable("name") String[] nameArray, @PathVariable("age") Integer[] ageArray) {
    for (String name : nameArray) {
        log.info(name);
    }
    for (Integer age : ageArray) {
        log.info(age.toString());
    }
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

2.2 映射Collection

在Controller接口方法中声明Collection类型参数,用@PathVariable指明路径参数的名称即可

@RequestMapping("path3/{name}/{age}")
public void testPath3(@PathVariable("name") Collection<String> nameCollection, @PathVariable("age") Collection<Integer> ageCollection) {
    log.info("类型:{}", nameCollection.getClass());
    for (String name : nameCollection) {
        log.info(name);
    }
    for (Integer age : ageCollection) {
        log.info(age.toString());
    }
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

 可以发现框架默认采用的类型是LinkedHashSet

2.3 映射List

在Controller接口方法中声明List类型参数,用@PathVariable指明路径参数的名称即可

@RequestMapping("path4/{name}/{age}")
public void testPath4(@PathVariable("name") List<String> nameList, @PathVariable("age") List<Integer> ageList) {
    log.info("类型:{}", nameList.getClass());
    for (String name : nameList) {
        log.info(name);
    }
    for (Integer age : ageList) {
        log.info(age.toString());
    }
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

框架采用的实现类是ArrayList

2.4 映射Set

在Controller接口方法中声明Set类型参数,用@PathVariable指明路径参数的名称即可

@RequestMapping("path5/{name}/{age}")
public void testPath5(@PathVariable("name") Set<String> nameSet, @PathVariable("age") Set<Integer> ageSet) {
    log.info("类型:{}", nameSet.getClass());
    for (String name : nameSet) {
        log.info(name);
    }
    for (Integer age : ageSet) {
        log.info(age.toString());
    }
}

 测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

框架采用的实现类是LinkedHashSet

路径参数方式映射到Controller接口方法中的数组CollectionListSet类型参数时,即便路径中的参数名称和接口方法中的参数名称一致,也不能省略@PathVariable注解

表单参数方式

表单参数方式要求在请求头中携带Content-Type,值为application/x-www-form-urlencoded,并且请求体中以param:value形式携带参数,每行代表一个参数,多个参数就有多行

注意:表单参数方式不适用于GET请求,适用于POSTPUT PATCHDELETE

1.映射基本类型参数

可以在Controller的接口中声明基本类型的参数,然后用@RequestParam注解修饰,指定请求体中的参数名称

@RequestMapping("form1")
public void testForm1(@RequestParam("name") String name, @RequestParam("age") Integer age) {
    log.info("name:{}   age:{}", name, age);
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

2.映射对象类型参数

定义一个对象,属性名称和请求体中的参数名称一致即可

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private Integer age;
}

然后将Controller接口方法中的参数声明为自定义对象

@RequestMapping("form2")
public void testForm2(User user) {
    log.info("name:{}   age:{}", user.getName(), user.getAge());
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

3.映射数组、集合类型参数

请求体中的参数如果想要传递多个值,有2种方式:

  • 直接给参数多个值,用,隔开即可
  • 声明多个参数名一样的参数

3.1 映射数组

在Controller接口方法中声明数组类型参数,用@RequestParam指明请求体中的参数名称即可

@RequestMapping("form3")
public void testForm3(@RequestParam("name") String[] nameArray) {
    for (String name : nameArray) {
        log.info(name);
    }
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

restful接口参数接收,restful,java,后端,spring boot,postman

3.2 映射Collection

在Controller接口方法中声明Collection类型参数,用@RequestParam指明请求体中的参数名称即可

@RequestMapping("form4")
public void testForm4(@RequestParam("name") Collection<String> nameCollection) {
    log.info("类型:{}", nameCollection.getClass());
    for (String name : nameCollection) {
        log.info(name);
    }
}

 测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

3.3 映射List

在Controller接口方法中声明List类型参数,用@RequestParam指明请求体中的参数名称即可

@RequestMapping("form5")
public void testForm5(@RequestParam("nameList") List<String> nameList) {
    log.info("类型:{}", nameList.getClass());
    for (String name : nameList) {
        log.info(name);
    }
}

 测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

3.4 映射Set

在Controller接口方法中声明Set类型参数,用@RequestParam指明请求体中的参数名称即可

@RequestMapping("form6")
public void testForm6(@RequestParam("name") Set<String> nameSet) {
    log.info("类型:{}", nameSet.getClass());
    for (String name : nameSet) {
        log.info(name);
    }
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

也可以在自定义对象中将属性声明为数组、集合类型,来接收多个值

FormData方式

用于文件上传。要求在请求头中携带Content-Type,值为multipart/form-data。请求体中可以携带普通参数,也可以携带文件

Postman测试发现这种方式适用于GETPOSTPUTPATCHDELETE,但浏览器一般只能用POST表单提交进行文件上传,所以建议用POST请求

可以在Controller的接口中分别声明普通类型参数和文件类型参数,其中文件类型参数必须是MultipartFile类型,然后用@RequestParam注解修饰,指定请求体中对应的参数名称

@RequestMapping("formData1")
public void testFormData1(@RequestParam("fileName") String fileName, @RequestParam("file")MultipartFile file) {
    log.info("{}:{}", fileName, file.getSize());
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

 FormData方式中的普通参数(即非文件类型参数)同样也可以利用数组、集合类型接收多个值,可以封装为自定义对象,方法与表单参数方式类似

请求体json方式

要求请求头携带Content-Type,值为application/json。请求体中的内容为json格式

 在Controller的接口方法映射这种请求参数只能通过自定义对象,自定义对象的属性名称要与请求体中json的属性名称一致,然后将自定义对象作为接口方法的参数,并标注@RequestBody注解,框架会自动将请求体的json转换为自定义对象

@RequestMapping("json1")
public void testJson1(@RequestBody User user) {
    log.info(user.toString());
}

测试结果如下

restful接口参数接收,restful,java,后端,spring boot,postman

 经过PostMan测试发现,用GET方法发送这种请求也可以顺利接收到参数,但是一般浏览器不支持GET请求携带请求体数据,所以还是建议实际开发中只针对POSTPUTPATCHDELETE采用这种方式进行参数映射文章来源地址https://www.toymoban.com/news/detail-803864.html

到了这里,关于Restful风格请求 后端接口参数接收详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C#/.NET】RESTful风格的Post请求与CreateAtAction

    ​  目录   引言 实现步骤 概念介绍 创建控制器 总结           在构建Web应用程序时,遵循RESTful风格的API设计原则能够使我们的系统更加灵活、可扩展和易于维护。其中,Post请求在创建资源时起重要作用。本文将介绍如何在.NET WebApi中使用CreateAtAction来实现RESTful风格的

    2024年02月12日
    浏览(32)
  • Restful风格使用postman测试接口【增删查改示例】

    Postman 最早是google的一个插件存在的,但是又google退出中国以及postman团队对工具的定位,主攻pc端app的开发及优化,现在的google插件已经很少再使用了,postman虽然是一个商用软件,但是对于我们普通用户来说,基本功能完全够用的。 Postman 从最初设计上就是为接口测试而生的

    2024年02月06日
    浏览(56)
  • 学习笔记230804---restful风格的接口,delete的传参方式问题

    如果后端提供的删除接口是restful风格,那么使用地址栏拼接的方式发送请求,数据放在主体中,后端接受不到,当然也还有一种可能,后端在这个接口的接参设置上是req.query接参。 问题描述 今天遇到的问题是,delete接口,需要传id,后端需要id的数据类型是lang类型,使用数

    2024年02月12日
    浏览(40)
  • ES的restful风格的HTTP方法详解

    ​ restful是一种设计风格,用于构建Web服务和API。 ​ 在restful风格中,HTTP请求方法(如GET、POST、PUT、DELETE)和URL(统一资源定位符)被用来定义服务端资源的操作。 1、GET方法 GET方法:用于获取指定资源或资源列表。对于GET请求,服务器会返回一个表示请求资源的实体,如果

    2024年02月15日
    浏览(43)
  • Java Restful API接口获取请求头、请求体、以及设置响应状态码、应答(响应)体等

    一、获取请求头 接口示例1: 1、从 request 对象中获取请求头: 二、获取请求体 1、从 request 对象中,使用缓冲流读取器、stream流等方式获取请求体 推荐写法一:

    2024年02月16日
    浏览(46)
  • RESTful:理解REST架构风格、RESTful API

    一、REST架构风格 REST(英文Representational State Transfer)是一种基于客户端和服务器的架构风格,用于构建可伸缩、可维护的Web服务。REST的核心思想是,将Web应用程序的功能作为资源来表示,使用统一的标识符(URI)来对这些资源进行操作,并通过HTTP协议(GET、POST、PUT、DELET

    2024年02月07日
    浏览(45)
  • 【SpringMVC】| RESTful架构风格、RESTful案例(CRUD)

    目录    RESTful架构风格 1. RESTful简介 2. RESTful的实现 3. HiddenHttpMethodFilter RESTful案例(CRUD) 1. 准备工作 2. 功能清单 列表功能(显示数据)  删除数据(难点) 添加数据  更新数据 图书推荐:用ChatGPT与VBA一键搞定Excel REST: Re presentational S tate T ransfer, 表现层资源状态转移

    2024年02月08日
    浏览(49)
  • Restful风格

    准备工作 第一步: 创建Maven工程然后手动添加 web模块 第二步: 在 pom.xml 文件中指定Maven工程的打包方式 war 第三步: 引入依赖,由于Maven的传递性,我们不必将所有需要的包全部配置依赖,只需要配置最顶端的依赖,其他依赖靠传递性导入 第四步: 在web.xml文件中配置SpringMVC的前端控制

    2024年02月07日
    浏览(40)
  • Restful风格笔记

    @RestController注解 在类上添加@RestController可以默认类中的所有方法都带有@ResponseBody注解,可以省去一个个添加的麻烦。 路径变量 @PathVariable注解可以让控制方法接收前端传来的请求中的路径变量。例如下面这个例子,无论前端传来1还是100这个id都能被控制方法中的requestId这个

    2024年02月10日
    浏览(42)
  • SpringMVC-Restful风格

    rest: 表现层(视图view及控制层controller)资源状态转移 具体说就是http协议里面,四个表示操作方式的动词: GET POST PUT DELETE 它们分别对应四种基本操作: GET 用来表示获取资源, POST用来新建资源, PUT用来更新资源,DELETE 用来删除资源. REST风格提倡URL地址使用统一的风格设计,从前到后各

    2024年01月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包