Springboot传参详解

 更新时间:2023年11月21日 15:14:08   作者:编程界小明哥  
这篇文章主要介绍了Springboot传参的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

测试工具 IDEA、postman

一、@RequestParam

针对QueryString参数传递,在请求URL中直接拼接请求参数,如URL?param1=value1& param2=value2

1.传递基本类型参数

在接收的方法中用@RequestParam注解修饰,指定前端传递的参数名称

@RequestMapping("QueryStringTest1")
public String QueryStringTest1(@RequestParam("id") String id,@RequestParam("name") String name){
    return "id is "+ id+",name is "+ name;
}

Postman 中调用

如果传递的参数和接收的参数名一致,甚至可以省略相关配置

省略1

@RequestParam(“id”) 中的参数名id被省略

@RequestMapping("QueryStringTest2")
public String QueryStringTest2(@RequestParam String id,@RequestParam String name){
    return "id is "+ id+",name is "+ name;
}

注意:因为有RequestParam注解的存在,所以传参必须包含所有使用RequestParam注解的接收参数,否则会报错(允许传空,但是必须包含参数);
可以使用@RequestParam(value = “id”,required = false) 的方式,让id未传也可以。

省略2

@RequestParam 注解直接被省略

@RequestMapping("QueryStringTest3")
public String QueryStringTest3(String id, String name){
    return "id is "+ id+",name is "+ name;
}

允许其中的参数不传,不会报错,但取值为null,比如name不传

传参和入参名不一样的情况

@RequestMapping("QueryStringTest4")
public String QueryStringTest4(@RequestParam("id") String myId,@RequestParam("name") String myName){
   return "myId is "+ myId+",myName is "+ myName;
}

2.传递对象类型参数

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

 @RequestMapping("objectTest1")
 public String objectTest1(User user){
     return "user.id is "+ user.getId()+",user.name is "+ user.getName();
 }

未传的属性值为null

加上注解@RequestParam,会怎么样呢? 会报错,不要这样用


@RequestMapping("objectTest3")
public String objectTest3(@RequestParam User user){
    return "user.id is "+ user.getId()+",user.name is "+ user.getName();
}

3.传递数组、集合类型 数组

拼接多个参数名称一样的参数即可,如URL?param=value1&param=value2&param=value3

@RequestMapping("arrayTest1")
public String[] arrayTest1(@RequestParam String[] name){
    for (String temp:name){
        System.out.println(temp);
    }
    return name;
}

对同一个参数赋多个值,多个值之间用,隔开,如URL?param=value1,value2,value3

集合

只举例List,其他类似

@RequestMapping("listTest1")
public List listTest1(@RequestParam List name){
    for(int i=0;i<name.size();i++){
        System.out.println("list name==="+name.get(i));
    }
    return name;
}

二、@PathVariable

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

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

1.传递基本类型参数

 @RequestMapping("pathTest1/{id}/{name}")
 public String pathTest1(@PathVariable("id") String id, @PathVariable("name") String name){
     return "id is "+ id+",name is "+ name;
 }

能省略这个注解吗?我的结论是不可以,请看下面

@RequestMapping("pathTest2/{id}/{name}")
public String pathTest2(String id,String name){
    return "id is "+ id+",name is "+ name;
}

2.传递数组、集合类型 数组

@RequestMapping("pathArrayTest1/{name}")
public String[] pathArrayTest1(@PathVariable("name") String[] names){
    for (String name:names){
        System.out.println("array name:"+name);
    }
    return names;
}

集合

@RequestMapping("pathListTest1/{name}")
public List pathListTest1(@PathVariable("name") List names) {
    for (int i=0;i<names.size();i++) {
        System.out.println("list name:" + names.get(i));
    }
    return names;
}

文件

// MultipartFile接收
@PostMapping("upload")
public String uploadFile(@RequestParam("file") MultipartFile myFile){
    return "type:"+myFile.getContentType()
            +" fileName:"+myFile.getOriginalFilename()
            +" size:"+myFile.getSize();
}

测试的注意点

  • 用post
  • 用Body的form-data
  • 参数类型选择File 而不是默认的Text

三、@RequestBody

针对body表单传参,RequestBody只能有一个

1.传递基本类型参数

@RequestMapping("bodyTest1")
public String bodyTest1(@RequestBody String name){
   return "name is:"+name;
}

2. 传递对象类型参数

比如User 对象

@RequestMapping("bodyTest2")
public String bodyTest2(@RequestBody User user){
    return "name is:"+user.getName() + " age is:"+user.getAge();
}

3. 传递数组、集合类型

数组

@RequestMapping("bodyTest3")
public String bodyTest3(@RequestBody String[] users){
    return Arrays.asList(users).toString();
}

集合

User对象

@RequestMapping("bodyTest4")
public String bodyTest4(@RequestBody List<User> users){
    return users.toString();
}

String类型

@RequestMapping("bodyTest5")
public String bodyTest5(@RequestBody List<String> users){
    return users.toString();
}

*Json对象

添加依赖

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.56</version>
</dependency>

后端代码

@RequestMapping("bodyTest6")
public String bodyTest6(@RequestBody JSONObject user){
    return "name is :"+user.get("name")+
            " age is :"+user.get("age");
}

四、HttpServletRequest

明哥以前经常用

@RequestMapping("httpRequest")
public String httpRequest(HttpServletRequest request){
    return "name is :"+request.getParameter("name")+
            " age is :"+request.getParameter("age");
}

或者

五、@PathVariable+@RequestParam混合

@RequestMapping("pathAndParam/{id}")
public String pathAndParam(@PathVariable("id") String id, @RequestParam("name") String name){
    return "id is "+ id+",name is "+ name;
}

六、@PathVariable+@RequestBody混合

@RequestMapping("pathAndBody/{id}")
public String pathAndBody(@PathVariable("id") String id, @RequestBody User user){
    return "id is "+ id+",name is "+ user.getName();
}

七、无注解传参

@RequestMapping("other")
public String other(User user){
    return "name is:"+user.getName() + " age is:"+user.getAge();
}

小结

这节总结了“ Springboot传参详解 ”,希望能对大家有所帮助

到此这篇关于Springboot传参详解的文章就介绍到这了,更多相关Springboot传参内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring中ResponseBodyAdvice的使用详解

    Spring中ResponseBodyAdvice的使用详解

    这篇文章主要介绍了Spring中ResponseBodyAdvice的使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Java微服务实战项目尚融宝接口创建详解

    Java微服务实战项目尚融宝接口创建详解

    这篇文章主要介绍了Java微服务实战项目尚融宝的接口创建流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Mybatis-Plus如何配置分页对象

    Mybatis-Plus如何配置分页对象

    本文主要介绍了Mybatis-Plus如何配置分页对象,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • SpringBoot整合MyBatis实现乐观锁和悲观锁的示例

    SpringBoot整合MyBatis实现乐观锁和悲观锁的示例

    这篇文章主要介绍了SpringBoot整合MyBatis实现乐观锁和悲观锁的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Sleuth+logback 设置traceid 及自定义信息方式

    Sleuth+logback 设置traceid 及自定义信息方式

    这篇文章主要介绍了Sleuth+logback 设置traceid 及自定义信息方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Spring实战之SpEl语法实例详解

    Spring实战之SpEl语法实例详解

    这篇文章主要介绍了Spring实战之SpEl语法,结合实例形式分析了SpEl创建数组、集合及解析变量等相关操作原理与实现技巧,需要的朋友可以参考下
    2019-12-12
  • Java基于Google zxing生成带logo的二维码图片

    Java基于Google zxing生成带logo的二维码图片

    zxing是一个开放源码的,用java实现的多种格式的1D/2D条码图像处理库,本文主要介绍了Java基于Google zxing生成带logo的二维码图片,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • SpringDataJPA在Entity中常用的注解介绍

    SpringDataJPA在Entity中常用的注解介绍

    这篇文章主要介绍了SpringDataJPA在Entity中常用的注解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • springboot集成druid连接池配置的方法

    springboot集成druid连接池配置的方法

    这篇文章主要介绍了springboot集成druid连接池配置的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 关于Spring源码深度解析(AOP功能源码解析)

    关于Spring源码深度解析(AOP功能源码解析)

    这篇文章主要介绍了关于Spring源码深度解析(AOP功能源码解析),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论