目录
GET请求两种方式
第一种:?& 形式
第二种:不使用?或者引号进行 传递参数
POST请求
小结:
get和post的使用情况
传参数重复
传参数:目前共有三种传递参数的方式
GET请求两种方式
第一种:?& 形式
java方法中入参什么注解都没有,适用于参数比较少的时候
例子:localhost:8080/school/student?name=张三&age=18
代码如下:
@GetMapping("/student")
public String get(String name,Integer age){
return "success";
}
缺点:参数较多的时候可能会丢失参数,因为url有长度限制
第二种:不使用?或者引号进行 传递参数
适用于参数比较少
- localhost:8080/school/student/张三/18
这样传值,代码举例如下,它会通过@PathVariable注解得到参数中的信息,注意的是,参数的位置不能够乱,参数必须一一对应
适用于:参数比较少,并且是单独的,(两个参数没有关联)
还适用于动态接口(应用场景:统计调用接口用户),写法如下:
@GetMapping("/{who}get-order/{orderNo}/{orderName}")
public String get(@PathVariable("orderNo") String no,
@PathVariable("orderName") String name,
@PathVariable("who") String who){
System.out.println("谁调用了此接口:"+" " +who);
return orderNo+orderName;
}
如果说,想要参数不是必须传值的话 可以加上 required = false 设置属性可以为空
@GetMapping("/get-order/{orderNo}/{orderName}")
public String get(@PathVariable(value = "orderNo",required=false) String no,
@PathVariable("orderName",required=false) String name){
return orderNo+orderName;
}
POST请求
适用于当我们的参数特别多的时候
@Requestbody这个注解能够将拿到json数据,并且反序列化成java对象,前端传值一般为json数据,所以一般我们在参数中加上此注解,例子如下:
@PostMapping("/student")
public String post(@RequestBody Student student){
return student.toString();
}
上述写法中json必须和实体类在属性上必须一一对应,可能会因为参数的类型出现报错,可以采用以下的方式解决
@PostMapping("/student")
public String post(@RequestBody JSONObject jsonObject){
String name = jsonObject.getString("name");
return student.toString();
}
在传值上,使用 @RequestBody JSONObject jsonObject 表示将请求体中的 JSON 数据绑定到 JSONObject 对象中,使用 @RequestBody Student student 则表示将请求体中的 JSON 数据解析为 Student 对象。对于 JSONObject 对象,我们可以使用 JSONObject 类中的方法解析 JSON 数据,而对于 Student 对象,我们可以直接使用 Student 类中的属性和方法访问学生对象的相关信息。
小结:
get和post的使用情况
因为get适用于参数较短的情况。因此一般用在查询的接口中,post一般用于数据的上传
post传值较为get更为可靠
传参数重复
第一种方式的参数是可以重复的,而且对于参数的位置也没有过多的要求,比如:localhost/school/student?name=张&age=18&name=李
上面的请求中获取的name参数是会同时得到两个的,name=张,李
然而在post请求中的json出现重复的时候,会发生覆盖现象,比如json为:
{“name”:“张”,"age":"18","name":"李"}
这样得到的name为 李,后面的json会覆盖前面的数据