@PathVariable
不推荐使用,仅在单个参数的时候选择使用
@GetMapping("/getId/{id}")
@ResponseBody
public String pathVariableTest(@PathVariable Integer id) {
return "id: " + id;
}
推荐使用,适用于单个、多个参数的情况
@GetMapping("/getId/{id}")
@ResponseBody
public String pathVariableTest(@PathVariable("id") Integer id) {
return "id: " + id;
}
@GetMapping("/getIdAny/{id}/{name}")
@ResponseBody
public String pathVariableTestAny(@PathVariable("id") Integer id, @PathVariable("name") String name) {
return "id:" + id + "name:" + name;
}
@GetMapping("/getId/{idValue}")
@ResponseBody
public String pathVariableTest(@PathVariable("idValue") Integer id) {
return "id: " + id;
}
以上三种方式的调用结果都是成功的
@RequestParam
@RequestParam
:将请求参数绑定到你控制器的方法参数上,是 SpringMVC
中接收普通参数的注解
@RequestParam(value = "参数名", required = "true", defaultValue= " ")
value
或 name
:参数名required
:是否包含该参数,默认为 true
,表示该请求路径中必须包含该参数,如果不包含就报错defaultValue
:默认参数值,如果设置了该值,required = true
将失效,自动为 false
,如果没有传该参数,就使用默认值不推荐使用,仅在单个参数的时候选择使用
@GetMapping("/getId")
@ResponseBody
public String requestParamTest(Integer id) {
return "id:" + id;
}
不推荐使用,仅在单个参数的时候选择使用
@GetMapping("/getId")
@ResponseBody
public String requestParamTest(@RequestParam Integer id) {
return "id:" + id;
}
推荐使用,适用于单个、多个参数的情况
@GetMapping("/getId")
@ResponseBody
public String requestParamTest(@RequestParam("idValue") Integer id) {
return "id:" + id;
}
可以看到在 @RequestParam
里面给参数 id
取名为: idValue
,这时候传参时参数名称也需要写成 idValue
即可
@GetMapping("/getIdAny")
@ResponseBody
public String requestParamTestAny(@RequestParam("id") Integer id, @RequestParam("name") String name, @RequestParam Integer age) {
return "id:" + id +"name:" + name + "age:" + age;
}
使用 @RequestParam
上传文件的方式
@ResponseBody
@PostMapping("upload")
public String upload(@RequestParam("myFile") MultipartFile file) {
return "---file name:" + file.getOriginalFilename()+
"---file type:" + file.getContentType()+
"---file size:" + file.getSize();
}
@RequestBody
对应 @RequestBody
的使用,方式其实是比较多的,可以耐心看看,传参以 json
格式传递,接收方式较多(一定要记住 Content-Type
为 application/json
)
public class UserOne {
private Integer id;
private String username;
private Integer age;
}
Get
方式 和 Post
方式其实都是可以使用 @requestBody
的,只不过一般来说 Post
用的较多
@GetMapping("/getRequestBodyValue")
@ResponseBody
public String RequestBodyTest(@RequestBody UserOne userOne) {
return userOne.toString();
}
public class UserOne {
private Integer id;
private String username;
private Integer age;
}
@GetMapping("/getValue")
@ResponseBody
public String entityValueTest(UserOne userOne) {
return userOne.toString();
}
JsonObject
接参
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.7version>
dependency>
@PostMapping("/getRequestBodyValue")
@ResponseBody
public String RequestBodyTest(@RequestBody JSONObject jsonObject) {
Integer id = jsonObject.getInteger("id");
String name = jsonObject.getString("name");
Integer age = jsonObject.getInteger("age");
return "---id:"+id+" ---name:"+name+" ---age:"+age;
}
String
接参数这种情况是先使用 String
把 body
里面的数据获取出来,再转换成 JsonObject
再进行参数解析
@PostMapping("/getRequestBodyValue")
@ResponseBody
public String RequestBodyTest(@RequestBody String jsonStr) {
// 将 jsonStr 转化为 JSONObject,再进行取值
JSONObject jsonObject= JSON.parseObject(jsonStr);
Integer id = jsonObject.getInteger("id");
String name = jsonObject.getString("username");
Integer age = jsonObject.getInteger("age");
return "---id:"+id+" ---name:"+name+" ---age:"+age;
}
HttpServletRequest
@GetMapping("/getHttpServletRequest")
@ResponseBody
public String httpServletRequestValueTest(HttpServletRequest request) {
String id = request.getParameter("id");
String name = request.getParameter("username");
String age = request.getParameter("age");
return "---id:"+id+" ---name:"+name+" ---age:"+age;
}
@GetMapping("/getHttpServletRequest")
@ResponseBody
public String httpServletRequestValueTest(HttpServletRequest request) {
Map<String, String[]> parameterMap = request.getParameterMap();
String[] ids = parameterMap.get("id");
String[] names = parameterMap.get("username");
String[] ages = parameterMap.get("age");
String id = ids[0];
String name =names[0];
String age =ages[0];
return "---id:"+id+" ---name:"+name+" ---age:"+age;
}
以上两种方式调用结果