@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上传文件命令如下
- curl --location --request POST 'http://127.0.0.1:8888/param/simpleUpload' \ --form 'file=@"/Users/...../Downloads/会好的.txt"'
/**
* 使用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请求。
网友评论