Spring @RequestParam注解的使用

1、@RequestParam作用

将请求参数绑定到你控制器的方法参数上

2、@RequestParam三个属性

@RequestParam(value=”参数名”, required=true/false, defaultValue=””):

(1)value:请求参数名(必须配置)单一参数时,可简化如下:

   /**
    * @Description:    url参数中的name必须要和@RequestParam("name")一致
    * @Author:         vdi100
    */
    @GetMapping("edit1")
    public String edit1(@RequestParam("userId") Integer userId, Model model) {
        System.out.println("*******************" + userId);
        model.addAttribute("userId" , userId);
        return "/admin/ronghe/rongheMobileList/edit";
    }
    /**
     * @Description:    url参数中的name必须要和@RequestParam("name")一致
     *                  参数名字不一样
     * @Author:         vdi100
     */
    @GetMapping("edit2")
    public String edit2(@RequestParam("userId") Integer id, Model model) {
        System.out.println("*******************" + id);
        model.addAttribute("id" , id);
        return "/admin/ronghe/rongheMobileList/edit";
    }

(2)required:是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置)

   /**
    * @Description:    required = true时必须有参数id,否则会报错
    *                  required = false时参数id可不传,默认为null,所以此时参数类型不能为int
    * @Author:         vdi100
    */
    @GetMapping("edit3")
    public String edit3(@RequestParam(value = "id", required = true) Integer id, Model model) {
        System.out.println("*******************" + id);
        model.addAttribute("id" , id);
        return "/admin/ronghe/rongheMobileList/edit";
    }

(3)defaultValue:默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了required,配置了什么值,都是 false;如果没有传该参数,就使用默认值(可选配置)

   /**
    * @Description:    设置defaultValue值时,required无论设置是何值,都默认为false
    * @Author:         vdi100
    */
    @GetMapping("edit4")
    public String edit4(@RequestParam(value = "id", required = false, defaultValue = "10") Integer id, Model model) {
        System.out.println("*******************" + id);
        model.addAttribute("id" , id);
        return "/admin/ronghe/rongheMobileList/edit";
    }

3、@RequestParam接收前台传递过来的数组

如下图传递的参数是数组:

@RequestParam接收参数:

   /**
    * @Description:    接收的参数ids是数组
    * @Author:         vdi100
    */
    @PostMapping("delete")
    @ResponseBody
    public RestResponse delete(@RequestParam(value = "ids[]", required = false) List<Long> ids) {
        if (null == ids) {
            return RestResponse.failure("ID不能为空" );
        }
        for (Long id : ids) {
            rongheMobileListService.deleteById(id);
        }
        return RestResponse.success();
    }

4、@RequestParam接收前台传递过来的Map<String, Object>

如下图前台ajax传递的参数data是一个Map<String, Object>:

@RequestParam接收参数:

   /**
    * @Description:    接收的参数data是Map<String, Object>
    * @Author:         vdi100
    */
    @PostMapping("entry")
    @ResponseBody
    public RestResponse add(@RequestParam(value = "data[mobile]") String mobile,
                            @RequestParam(value = "data[pro]") String pro,
                            @RequestParam(value = "data[realTime]", required = false) String realTime,
                            @RequestParam(value = "data[sjbm]", required = false) String sjbm,
                            @RequestParam(value = "data[sjmc]", required = false) String sjmc,
                            @RequestParam(value = "data[mobBm]", required = false) String mobBm,
                            @RequestParam(value = "data[mobMc]", required = false) String mobMc,
                            @RequestParam(value = "data[orderId]", required = false) String orderId,
                            @RequestParam(value = "data[sn]") String sn,
                            @RequestParam(value = "data[bakMobile]", required = false) String bakMobile) {

        return RestResponse.success();
    }

 

### Spring 中 `@RequestParam` 注解的必要性和场景分析 #### 1. `@RequestParam` 的作用 `@RequestParam` 是 Spring MVC 提供的一个注解,主要用于绑定 HTTP 请求中的查询参数或表单数据到控制器方法的参数上。它支持 GET 和 POST 请求,并能够处理请求路径或请求体中的参数[^2]。 当开发者希望显式声明某个方法参数来源于请求参数时,可以使用注解。例如: ```java @GetMapping("/example") public String example(@RequestParam("name") String name) { return "Hello, " + name; } ``` 上述代码中,`@RequestParam("name")` 将 URL 查询字符串中的 `name` 参数映射到方法参数 `String name` 上[^1]。 --- #### 2. 是否必须使用 `@RequestParam` 并非所有情况下都需要使用 `@RequestParam` 注解。以下是两种常见情况下的讨论: ##### (1) **自动匹配** 如果方法参数名称与请求参数名称一致,则无需显式添加 `@RequestParam` 注解Spring 能够通过参数名推断并完成自动绑定。例如: ```java @GetMapping("/auto-match") public String autoMatch(String name) { // 不加 @RequestParam return "Hello, " + name; } ``` 在这种情况下,URL `/auto-match?name=John` 同样会将 `name` 绑定到方法参数上。 ##### (2) **复杂对象绑定** 对于复杂的 Java 对象(如实体类),可以直接作为方法参数传递而不需要逐个字段使用 `@RequestParam`。Spring 会尝试基于请求参数的名字来填充对象属性。例如: ```java public class User { private String username; private int age; // Getters and Setters } @PostMapping("/user") public String createUser(User user) { // 自动绑定整个对象 return "User created: " + user.getUsername(); } ``` 此时,客户端可以通过发送如下请求实现绑定: ``` POST /user?username=John&age=30 Content-Type: application/x-www-form-urlencoded ``` 这种情况下也不需要单独使用 `@RequestParam` 来标记每个字段。 --- #### 3. 使用 `@RequestParam` 的典型场景 尽管不是强制性的,但在某些特定需求下推荐使用 `@RequestParam`: - **必填参数校验** 如果某参数是必需的,可以在注解中设置 `required=true` 属性,默认值为 true。这样,缺少对应参数时会抛出异常。 ```java public String requiredParam(@RequestParam(required = true) String param) {} ``` - **默认值提供** 当参数可能为空时,可通过 `defaultValue` 设置缺省值。 ```java public String defaultParam(@RequestParam(defaultValue = "World") String name) { return "Hello, " + name; } ``` - **多值绑定** 支持接收多个同名参数的情况,返回 List 或数组形式的数据结构。 ```java public String multiValues(@RequestParam List<String> names) { return String.join(", ", names); } ``` --- #### 4. 总结 `@RequestParam` 并非总是必要的,在简单场景或者对象绑定的情况下可以选择不使用。然而,为了增强代码可读性、灵活性以及满足特殊业务逻辑的需求,合理运用此注解是非常有益的。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值