• @RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)


    目录

    一、@RequestMapping  路由映射

    二、参数传递

    1、传递单个参数

    2、传递多个参数

    3、传递对象

    4、后端参数重命名

    5、传递数组

    6、传递集合

    7、传递JSON

    8、获取url中的参数

    9、上传图片/文件


    一、@RequestMapping  路由映射

    • 指定请求访问的路径
    • 既可以修饰类,又可以修饰方法

    @RequestMapping支持Get、Post、Delete等多种请求方式

    1. @RestController
    2. @RequestMapping("/user")
    3. public class HelloController {
    4. @RequestMapping("/sayhi")
    5. public String sayHi(){
    6. return "Hi,SpringBoot";
    7. }
    8. @RequestMapping("/sayhello")
    9. public String sayHello(){
    10. return "Hello,SpringBoot";
    11. }
    12. }

    假设该程序在本地运行,则访问的url路径为       localhost:8080/user/sayhi

             /user即类的路径,/sayhi是方法的路径

    若类上没有@RequestMapping等注解进行路由映射的话,直接端口号后加方法的路径即可

            如:    localhost:8080/sayhi

    注意: / 可以省略,但建议企业开发时,统一加上,前加后不加

    @RequestMapping注解没有写属性名,默认是value

    若要限制请求方式,使用method属性  如:

    1. @RequestMapping(value = "/sayhi",method = RequestMethod.POST)
    2. public String sayHi(){
    3. return "Hi,SpringBoot";
    4. }

    比如上面的代码就限制了/sayhi路径的访问必须是POST请求

    二、参数传递

    此处我们加上类路径/user避免路由重复(读者可忽略这句话,不影响)

    1、传递单个参数

    1. @RequestMapping("/m1")
    2. public String m1(String name){
    3. return "接收到的参数name:" + name;
    4. }

    后端接收单个参数,此处是name,字符串类型,并返回字符串

    前端传过来的请求中需要带上name参数,需要名称完全一样,参数前用?与路由隔开

    浏览器直接访问:

    Postman构造请求(本地路由既可以用127.0.0.1,也可以用localhost):

    底层逻辑:从请求的参数中,获取参数名为name的值,并给name赋值

    2、传递多个参数

    1. @RequestMapping("/m2")
    2. public String m2(String name, Integer age){
    3. return "接收到的参数name:" + name + " ;age:" + age;
    4. }

    后端接收多个参数,此处是name和age,字符串类型和整形,并返回字符串

    前端传过来的请求中需要带上name参数和age参数,需要名称完全一样,参数前用?与路由隔开,不同的参数间用&隔开

    参数发送的顺序可以任意调换

    当多个参数传值时,可以不用每个参数都传值,不传值的参数默认是null(使用包装类的前提下)

    此处不用age,用Integer的原因是如果使用基本类型,必须要传值,不传会报错,所以开发时,建议使用包装类

    底层逻辑:从请求的多个参数中,获取参数名为name和age的值,并给对应名称的数据赋值

    3、传递对象

    1. @RequestMapping("/m3")
    2. public String m3(Person person){
    3. return "接收到的参数person:" + person.toString();
    4. }

    Person中有以下属性

    后端接收一个对象或对象中的属性,此处是Person,并返回字符串

    前端传过来的请求中可以依然用传递参数的方式,参数需要是对象中的属性名,需要名称完全一样,参数前用?与路由隔开,不同的参数间用&隔开

    可以看到,用传递多个参数的方式依然可以,后端会自动读取参数中对象中名称一样的属性,对于没有的属性则不理睬

    底层逻辑:从请求的参数中,自动识别与对象属性名一致的参数,并给对象中对应名称的属性赋值

    4、后端参数重命名

    应用场景:传过来的参数名称不方便改变,但又想改变后端中自己使用的参数名称,不想用传过来的参数名称

    1. @RequestMapping("/m4")
    2. public String m4(@RequestParam(value = "name", required = false) String username){
    3. return "接收到的参数name:" + username;
    4. }

    后端:此刻用了@RequestParam后,前端传过来的参数为name(value中的值),会自动赋值给username

    前端:参数名需要与value中的值保持一致

    注意:如果进行了重命名,就必须要使用@RequestParam注解里的名字

    底层逻辑:此处只是运用了@RequestParam注解实现了参数重命名,传递参数的逻辑与前面几种方式一致

    5、传递数组

    1. @RequestMapping("/m6")
    2. public String m6(String[] arrayParam){
    3. return "接收到的参数arrayParam" + Arrays.toString(arrayParam) + ", 长度" + arrayParam.length;
    4. }

    后端:接收参数是数组类型,可接收前端传来的数组类型参数

    前端:当我们请求中,同一个参数有多个时,浏览器会帮我们自动给封装成一个数组

    注意:参数名需完全一致,且和后端数组名相同,对应的value可以不同

    底层逻辑:后端正常接收数组,前端(浏览器)发送请求时,若同一个参数有多个时,会自动将其封装成一个数组,发送给后端

    6、传递集合

    1. @RequestMapping("/m7")
    2. public String m7(@RequestParam(required = false) List listParam){
    3. return "接收到的参数listParam:" + listParam + ",长度:" +listParam.size();
    4. }

    后端:接收参数类型为集合,并加上注解@RequestParam修饰,表示后端会将前端传来的参数自动解析为集合

    前端:按数组的方式进行传参,当我们请求中,同一个参数有多个时,浏览器会帮我们自动给封装成一个数组

    注意:传递集合和传递数组前端传递参数的方式是没有发生改变的,改变的是后端的处理方法


    底层逻辑:@RequestParam表示将前端传来的参数自动解析成该注解修饰的类型(此处是集合),注解内参数意思为若前端没有传递参数,则自动将该类型赋值为null,避免空指针报错

    7、传递JSON

    1. @RequestMapping("/m8")
    2. public String m8(@RequestBody Person person){
    3. return "接收到的参数person:" + person.toString();
    4. }

    后端:@RequestBody注解来将请求体内容转换为一个Person对象
    前端:JSON格式来传递参数
    注意:后端参数要加上@RequestBody注解进行修饰,表示自动将前端传来的参数换成需要的参数类型,传递Json数据这种传参方式被大量使用,咱数组、对象等的参数类型全部可以用JSON传递

    底层逻辑:参数加上@RequestBody注解进行修饰,表示自动将前端传来的参数换成需要的参数类型,其实后端接收JSON参数的功能还是靠得该注解

    8、获取url中的参数

    1. @RequestMapping("/m9/{userId}/{name}")
    2. public String m9(@PathVariable Integer userId, @PathVariable String name){
    3. return "userId:" + userId + ",name:" + name;
    4. }

    后端:在url中用占位符占位,然后参数用@PathVariable修饰,表示从路径中取到该参数
    前端:直接在url中传参,用 / 分隔
    注意:可以获取一个,也可以获取多个,但是需要注意他们的顺序,请求格式必须和后端定义的url格式匹配,否则会取错数据甚至报错

    底层逻辑: 前端直接在url中传参,用 / 分隔,后端先在url中用占位符占位,然后参数用@PathVariable修饰,表示从url中占的对应位置取得对应参数并赋值给自己的参数

    9、上传图片/文件

    1. @RequestMapping("/m10")
    2. public String m10(@RequestPart MultipartFile file) throws IOException {
    3. // 打印文件名称
    4. System.out.println(file.getOriginalFilename());
    5. // 保存本地
    6. file.transferTo(new File("D:/临时,后续删除/" +file.getOriginalFilename()));
    7. return "success";
    8. }

    后端:用MultipartFile类型的变量接收文件,参数使用@RequestPart注解,它用于接收文件上传
    前端:直接发送文件/图片即可
    注意:前端发送的文件名称必须和后端接受的参数名称完全一致,不然会报错

    底层逻辑:用MultipartFile类型的变量接收文件,参数使用@RequestPart注解,它用于接收文件上传

  • 相关阅读:
    [附源码]java毕业设计鲜花销售管理系统
    计算机毕业设计springboot健身俱乐部会籍管理系统cbz46源码+系统+程序+lw文档+部署
    8月一次阿里云的Java面试凉经(止步三面)
    传输层TCP协议
    对于 CRC 校验的 学习笔记
    React: 组件介绍 Components
    solidity
    ES6 的 export / import 常用方式总结
    Python入门系列(八)日期时间、数学、json
    spark学习总结第2天
  • 原文地址:https://blog.csdn.net/dream_ready/article/details/133988987