美文网首页
用@RequestParam和不用的区别

用@RequestParam和不用的区别

作者: 王大豆 | 来源:发表于2020-06-30 21:56 被阅读0次

遇见的困扰

笔者今天被一个问题困扰了一段时间
看如下代码:

@RestController
@RequestMapping("/getTest")
public class GetTestController {

    @RequestMapping("/listRaramTest")
    public List<String> listRaramTest(@RequestParam("userIdList") List<String> userIdList){
        return userIdList;
    }

}

@RequestParam修饰了一个list
那么用PostMan该如何传入数组呢?
实际上很简单
在这里记录一下:


postman.png

其实只要按参数名字传入一个按都好分隔的字符串就好了

不用@RequestParam和用@RequestParam的区别

1. 不用@RequestParam
不用的代码:

    @RequestMapping("/noAnnotationTest")
    public String[] noAnnotationTest(String[] userIdList){
        return userIdList;
    }
  1. 不传参数的时候不会报错
  2. 要传参数的时候,只能获取url上的参数,不能获取form-data的数据
  3. 要传参数的时候,url的参数名字只能和参数名一样。
    访问方式如下:
localhost:8080/getTest/noAnnotationTest?userIdList=123,123

2. 用@RequestParam
用的代码
1.1. 如果用了,如下:

    @RequestMapping("/listRaramTest")
    public List<String> listRaramTest(@RequestParam List<String> userIdList){
        return userIdList;
    }

那么你必须传参数,而且参数的key值一定要是userIdList
访问就应该如下访问:

localhost:8080/getTest/listRaramTest?userIdList=123,123

1.2. 在下面这种情况下是可穿可不传

    @RequestMapping("/listRaramTest")
    public List<String> listRaramTest(@RequestParam(required = false) List<String> userIdList){
        return userIdList;
    }

1.3. 那么我不想参数的key是userIdList怎么办呢,下面就能修改传入参数的key值

    @RequestMapping("/listRaramTest")
    public List<String> listRaramTest(@RequestParam(name = "userIds") List<String> userIdList){
        return userIdList;
    }

或者像下面那样配置:

    @RequestMapping("/listRaramTest")
    public List<String> listRaramTest(@RequestParam(value = "userIds") List<String> userIdList){
        return userIdList;
    }

访问方式如下:

localhost:8080/getTest/listRaramTest?userIds=123,123

注意:name和value的作用是一样的,value只是name的别名

1.4 那如果我不想传参数,但是我又不想传入的值为空,那么可以像如下的方式:

    @RequestMapping("/listRaramTest")
    public List<String> listRaramTest(@RequestParam(defaultValue = "456,456") List<String> userIdList){
        return userIdList;
    }

这样就算像如下的方式访问也不会传入的值为null

localhost:8080/getTest/listRaramTest

最后的强调

不加注解只能接收url参数
加了@RequestParam后即能接收url的参数,也能接收form-data参数,但是只支持Content-Type: 为 application/x-www-form-urlencoded的参数传入

相关文章

网友评论

      本文标题:用@RequestParam和不用的区别

      本文链接:https://www.haomeiwen.com/subject/elpfqktx.html