美文网首页
一文搞定RequestParam注解传参,map 数组 文件(一

一文搞定RequestParam注解传参,map 数组 文件(一

作者: dbasy | 来源:发表于2021-05-26 23:47 被阅读0次

@RequestParam

该annotation用来绑定servlet请求参数到控制器的方法参数中。包括查询数据,表单数据,以及多部分文件。

Content-Type 媒体类型

用来定义返回的媒体类型以及编码方式,如“text/plain;charset=UTF-8 ”以文本类型并以UTF-8编码返回,以下例子如无特殊说明,均以该媒体类型返回

从易到难例子

1.简单单个或多个传参,多个的话在方法参数使用多个注解即可,
 /*
     简单单个参数
     http://127.0.0.1:8888/param/simple?id=1
     */
    @GetMapping("/simple")
    public String simpleParam(@RequestParam String id) {
        logger.info(String.format("接收到的参数id值为%s", id));
        return "simpleOk";
    }

结果

2021-05-26 23:00:29.100  INFO 28513 --- [nio-8888-exec-1] c.c.p.mvc.requestParam.ParamController   : 接收到的参数id值为1
2.以map接收 key-value参数
 /**
     * 以map接收 key-value参数
     * http://127.0.0.1:8888/param/map?name=王&sex=男&age=18
     */
    @GetMapping("/map")
    public String mapParam(@RequestParam HashMap<String, String> map) {
        map.entrySet();
        for (Map.Entry entry : map.entrySet()) {
            logger.info(String.format("key:%s  value:%s", entry.getKey(), entry.getValue()));
        }

        return "mapOk";
    }

结果

2021-05-26 23:29:54.937  INFO 28513 --- [nio-8888-exec-8] c.c.p.mvc.requestParam.ParamController   : key:name  value:王
2021-05-26 23:29:54.938  INFO 28513 --- [nio-8888-exec-8] c.c.p.mvc.requestParam.ParamController   : key:sex  value:男
2021-05-26 23:29:54.938  INFO 28513 --- [nio-8888-exec-8] c.c.p.mvc.requestParam.ParamController   : key:age  value:18
3.以MutilValueMap接收 一键多值参数

http://127.0.0.1:8888/param/multiMap?name=王&name=张&name=李

    /**
     * 以MutilValueMap接收 一键多值参数
     * http://127.0.0.1:8888/param/multiMap?name=王&name=张&name=李
     */
    @GetMapping("/multiMap")
    public String multiValueMapParam(@RequestParam MultiValueMap<String, String> map) {

        for (MultiValueMap.Entry entry : map.entrySet()) {
            logger.info(String.format("key:%s ", entry.getKey()));
            List<String> values = map.get(entry.getKey());
            for (String value : values) {
                logger.info(String.format("value%d:%s ", values.indexOf(value) + 1, value));
            }
        }
        return "multiValueMapOk";
    }

结果

2021-05-26 23:33:00.913  INFO 28513 --- [nio-8888-exec-1] c.c.p.mvc.requestParam.ParamController   : key:name 
2021-05-26 23:33:00.913  INFO 28513 --- [nio-8888-exec-1] c.c.p.mvc.requestParam.ParamController   : value1:王 
2021-05-26 23:33:00.913  INFO 28513 --- [nio-8888-exec-1] c.c.p.mvc.requestParam.ParamController   : value2:张 
2021-05-26 23:33:00.913  INFO 28513 --- [nio-8888-exec-1] c.c.p.mvc.requestParam.ParamController   : value3:李 
4.以String数组接收 数组参数, 值以逗号分割来表示组数如names=王,张,李
   /**
     * 以数组接收 多个参数
     * http://127.0.0.1:8888/param/array?names=王,张,李
     */
    @GetMapping("/array")
    public String arrayParam(@RequestParam String[] names) {
        for (int i = 0; i < names.length; i++) {
            logger.info(String.format("value%d:%s ", i + 1, names[i]));
        }
        return "arrayOk";
    }

结果

2021-05-26 23:35:45.741  INFO 28513 --- [nio-8888-exec-4] c.c.p.mvc.requestParam.ParamController   : value1:王 
2021-05-26 23:35:45.741  INFO 28513 --- [nio-8888-exec-4] c.c.p.mvc.requestParam.ParamController   : value2:张 
2021-05-26 23:35:45.741  INFO 28513 --- [nio-8888-exec-4] c.c.p.mvc.requestParam.ParamController   : value3:李
5. 使用MultipartFile实现单个文件上传

使用POST请求,媒体类型为 multipart/form-data

curl上传文件命令如下

 /**
     * 使用MultipartFile实现单个文件上传
     * 使用POST请求,媒体类型为 multipart/form-data
     * curl --location --request POST 'http://127.0.0.1:8888/param/simpleUpload' \
     * --form 'file=@"/Users/...../Downloads/会好的.txt"'
     */
    @PostMapping("/simpleUpload")
    public String simpleUploadFile(@RequestParam("file") MultipartFile file) throws IOException {

        if (!file.isEmpty()) {
            logger.info(String.format("上传文件名为%s,文件大小为%d字节", file.getName(), file.getBytes().length));
            return "simpleUploadOk";
        }
        return "simpleUploadFail";
    }
6. 使用MultipartFile实现多个文件上传

使用POST请求,媒体类型为 multipart/form-data

 /**
     * 使用MultipartFile实现多个文件上传
     * 使用POST请求,媒体类型为 multipart/form-data
     */
    @PostMapping("/multiUpload")
    public String multiUploadFile(@RequestParam("files") MultipartFile[] files) throws IOException {
        for (MultipartFile file : files) {

            if (!file.isEmpty()) {
                logger.info(String.format("上传文件名为%s,文件大小为%d字节", file.getName(), file.getBytes().length));

            }
        }


        return "multiUpload";
    }

这次使用postman来传多个文件


image.png

我相信通过上面6个例子,应该涵盖了@RequestParam各类传参类型,下篇文章我会讲下前端如何通过前端和后端交互,为了简便前端就用ajax请求。

相关文章

网友评论

      本文标题:一文搞定RequestParam注解传参,map 数组 文件(一

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