加@RequestParam注解和不加@RequestParam注解的区别

本文详细介绍了Spring MVC中@RequestParam注解的作用,包括设置默认值、指定参数是否必须、绑定参数名等特性。同时,通过实例展示了不使用@RequestParam时参数传递的规则,以及处理基本类型参数和数组的情况。文章最后给出了不同参数传递方式下的结果对比。
摘要由CSDN通过智能技术生成

区别

  • 加上@RequestParam 和不加@RequestParam
    • 1.如果加上@RequestParam,
    • 1.1 defaultValue属性可以给参数设置默认值,
    • 1.2 required可以设置参数是否必须传,默认为true
    • 1.3 value可以将前端传来的值的key与你用来接收值的参数进行绑定,无需在意参数名字是否一致
    • 1.4 如果设置了defaultValue属性,那么required默认为false
    • 2.如果不加@RequestParam
    • 2.1 前端传来参数的key必须与你后端接受值的那个参数名一致,不然获取不到值
    • 2.2 后端设置的参数的类型如果是基本数据类型 如 int long 等8中基本类型,并且前端没有传这个参数,那么就会报一个错误
      "Optional char parameter ‘xxx’ is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type "
      这个意思是说,参数xxx是可选的,但是它本身是个基本类型数据,没有办法被转换成null值,让你考虑它把变为当前基本类型的包装类如Long,Integer等,那么你把它转换成对应的包装类就可以了
    • 2.3 后端设置的参数的类型如果是包装类或者String或者自定义的类那么,那个前端可传可不传,如果不传获取的就是null值

实际使用

有时候会传一些简单地值,有时候会传一些复杂点的值

常用的数值

方法体

   @GetMapping("/page")
    @UserLoginToken
    @ApiOperation("列表,status可传可不传")
    public ApiCommonResult select(HttpServletRequest request,
                                  @RequestParam(defaultValue = "1",value = "page") int pageNum,
                                  @RequestParam(required = false,defaultValue = "20") int pageSize,Integer status)
    {
        try {
            System.out.println(status);
            return new ApiCommonResult(true,1,"success");
        } catch (Exception e) {
            e.printStackTrace();
            return new ApiCommonResult(false,0,e.getMessage());
        }

    }
访问的url,这里并没有传递参数

在这里插入图片描述
获取到的各个值,status没有加@RequestParam 注解,也没有传值,就为null.pageNum和pageSize使用了@RequestParam 注解,但是也没有传值,所以使用的是设置的默认值
在这里插入图片描述

访问的url,传递参数

在这里插入图片描述
获取到的结果,方法体中用page绑定了前端传来key,获取到的值如下图
在这里插入图片描述

复杂点的参数

  • 接受普通数组
    方法体
    @GetMapping("/array")
    @UserLoginToken
    @ApiOperation("数组")
    public ApiCommonResult select(@RequestParam(required = false,value = "userNameArray") String[] list)
    {
        try {
            System.out.println(list);
            return new ApiCommonResult(true,1,"success");
        } catch (Exception e) {
            e.printStackTrace();
            return new ApiCommonResult(false,0,e.getMessage());
        }

    }

访问url,传递了参数
在这里插入图片描述
获取到的结果
可以看到获取到了值
在这里插入图片描述
访问url,没有传递参数
在这里插入图片描述
获取到的为null
在这里插入图片描述
访问url,传一个空的数组
在这里插入图片描述
获取为空数组
在这里插入图片描述
当然了你也可以不使用@RequestParam注解,直接这样用就可以了,只不过传递的参数名必须与url上的一致

    @GetMapping("/array")
    @UserLoginToken
    @ApiOperation("数组")
    public ApiCommonResult select(String[] userNameArray)
    {
        try {
            System.out.println(userNameArray);
            return new ApiCommonResult(true,1,"success");
        } catch (Exception e) {
            e.printStackTrace();
            return new ApiCommonResult(false,0,e.getMessage());
        }

    }

在这里插入图片描述

获取到数组
在这里插入图片描述

又是充满活力的一天,欧耶

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值