首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SpringWeb项目@RequestParam注解接收参数类型整理,会这种写法,代码又简洁了许多

最近维护一个 web 项目,需要增加查询参数,随着业务逻辑的细化,查询条件由最初的2个参数,变成了7个参数,这种情况太常见了。(项目环境:Spring Web 5.1.6、springBoot 2.1.4)

改完 html 页面,还需要修改 controller 文件,改了 controller 文件,还要修改service 和 dao 文件。

举个例子,最初控制器的方法:

@GetMapping("/hello")public void hello(@RequestParam String param1,@RequestParam String param2) { // 处理字符串参数 }

修改后的控制器:

@GetMapping("/hello")public void hello(@RequestParam String param1,@RequestParam String param2,@RequestParam String param3,@RequestParam String param4,@RequestParam String param5,@RequestParam String param6,@RequestParam String param7) { // 处理字符串参数 }

好几类都是如此,太痛苦了,就不能写成一个参数接收?

有的小伙伴会把这些参数封装成一个Vo,然后就可以用一个参数接收了。但是封装我也懒得封装,毕竟封装成一个对象也很麻烦呀!就没有其他办法了吗?

我就用Map集合接收参数如何?试了一下还真行,嘻嘻。

@GetMapping("/hello")public void hello(@RequestParam Map<String,String> map) {// 处理字符串参数}

既然用到了 @RequestParam 注解,我们就把这个注解捋一遍,看看它都能接收什么类型的参数。

一、@RequestParam简单介绍

@RequestParam 是 Spring MVC 框架中用于接收 HTTP 请求参数的注解。在Spring Boot 应用中,通常用于从 HTTP 请求中获取参数值。

假设有一个Spring MVC的Controller类,如下所示:

在这个Controller中,我们定义了一个 GET 请求处理方法 hello,它接受一个名为"name"的请求参数。@RequestParam 注解用于将 HTTP 请求中的参数值赋给对应的方法参数。在这个例子中,方法参数 name 将会接收名为"name"的请求参数的值。

当我们发送一个GET请求到/hello路径,并携带参数,比如/hello?name=John,Spring MVC会自动将参数值"John"注入到方法参数name中,然后方法就可以使用这个值进行处理,最终返回"Hello, John!"。

这就是@RequestParam的基本用法。它还支持一些额外的特性,比如设置默认值、将参数转换为特定类型等。

二、@RequestParam接收数据类型汇总

@RequestParam注解可以接受各种数据类型的参数,包括基本数据类型和其包装类、String、数组、List、Set等集合类型,以及自定义类型(如果能够被Spring MVC转换器转换)。

以下是一些常见的@RequestParam参数类型示例:

基本数据类型和其包装类

@GetMapping("/hello")public String hello(@RequestParam int age) { // 处理整型参数 return "Age: " + age;}

前端URL请求示例:

http://localhost:8080/hello?age=18

String类型

@GetMapping("/hello")public String hello(@RequestParam String name) { // 处理字符串参数 return "Hello, " + name + "!";}

前端URL请求示例:

http://localhost:8080/hello?name=andy

数组类型

@GetMapping("/hello1")public String hello1(@RequestParam String[] hobbies) { // 处理字符串数组参数 return "Hobbies: " + Arrays.toString(hobbies);}

前端URL请求示例:

http://localhost:8080/hello1?hobbies=value1&hobbies=value2&hobbies=value3

在这个URL中,hobbies 是@RequestParam注解期望接收的参数名,它对应String数组中的元素。每个参数名后面跟着等号("=")和相应的值,不同参数之间用"&"符号分隔。

List类型

@GetMapping("/hello")public String hello(@RequestParam List<String> hobbies) { // 处理字符串列表参数 return "Hobbies: " + hobbies;}

前端URL请求示例:

http://localhost:8080/hello?hobbies=value1&hobbies=value2&hobbies=value3

可变参数/变长参数

@GetMapping("/hello2")public String hello2(@RequestParam String... hobbies) { // 可变参数 return "Hobbies: " + Arrays.toString(ArrayUtils.toArray(hobbies));}

前端URL请求示例:

http://localhost:8080/hello2?hobbies=value1&hobbies=value2&hobbies=value3

变长参数不仅可以是String类型,还可以是复杂的对象类型。

6.Map集合

@GetMapping("/hello")public String hello(@RequestParam Map<String, String> params) { // 使用Map中的参数进行处理 String name = params.get("name"); String age = params.get("age"); return "Hello, " + name + "! You are " + age + " years old.";}

前端URL请求示例:

http://localhost:8080/hello?name=test&age=18

在这个URL中,"name=test"和"age=18"就是参数键值对,它们会被Spring MVC自动映射到@RequestParam Map<String, String> params参数中。

7.自定义类型

@GetMapping("/hello")public String hello(@RequestParam User user) { // 处理自定义类型参数 return "User: " + user.getName();}

前端URL请求示例:

http://localhost:8080/hello?name=test&age=18

这个 User 对象就是刚开始小伙伴把所有的参数封装成的Vo。一般使用自定义对象时,@RequestParam注解是可以忽略不写的。

三、@RequestParam属性使用

value属性

用来接收URL地址?之后的参数,必须和被接收参数名称保持一致。name属性是value属性的别名,它俩一个意思。

@RequestParam(value = "username") String userName

Required属性

@RequestParam 注解的 required 属性默认为 true,这意味着如果请求中没有提供相应的参数,将会抛出异常。可以将 required 设置为 false,以允许参数的缺失。

@RequestParam(value = "username", required = false) String username

3. defaultValue默认值

我们可以通过设置 defaultValue 属性来指定参数的默认值,在请求中没有提供参数时会使用该默认值。

@RequestParam(value = "page", defaultValue = "1") int page

以上就是本次的整理,解锁了 @RequestParam 的一个新用法。懒一点还是有好处的,哈哈。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OUXNHBtetLEESIhsJf7SCIYQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券