1.@PathVariable 用于获取rest请求路径中的参数,并封装到方法的入参中。
1.1 将请路径中的{id}位置的参数风中到getMsg方法的入参id中。
@GetMapping("/get/{id}")
public Object getMsg(@PathVariable String id){
return id+"的内容";
}
1.2 如果请求路径中的参数名和方法入参的参数名不一致,需要指定映射关系,如下面将id的值映射到ids中。
@GetMapping("/get/{id}/")
public Object getMsg(@PathVariable("id") String ids){
return id+"的内容";
}
@GetMapping("/get/{id}/{org_id}")
public Object getMsg2(@PathVariable String id,@PathVariable("org_id")String orgId){
System.out.println("id="+id+",orgId="+orgId);
return id+","+orgId+"的内容";
}
2.@RequestBody 前端将请求参数封装成一个对象给后台方法,这个对象可以是json字符串,也可以是pojo对象,如果是pojo对象接受参数,则@RequestBody注解会将参数自动封装到pojo的对象属性中。前端发送请求时要求content-type为application/json。
使用json字符串接受参数
@PostMapping("/post2")
public Object submit2(@RequestBody String json){
JSONObject jsonObj = JSON.parseObject(json);
String name = jsonObj.getString("name");
String age = jsonObj.getString("age");
return "name="+name+",age="+age;
}
使用pojo对象接受参数
@PostMapping("/post3")
public Object submit3(@RequestBody Person person){
String age = person.getAge();
String name = person.getName();
return "name="+name+",age="+age;
}
3.@RequestParam 将前端发送的请求参数映射到后台对应的字段上,前端发送参数到后台,是多个键值对形式,而非一个大json格式,content-type需要设置为:application/x-www-form-urlencoded
@PostMapping("/post")
public Object submit(@RequestParam String name,@RequestParam String age){
return "name="+name+",age="+age;
}
对比@RequestParam 和 @RequestBody:
相同点:都是用来将前端的请求参数封装到后台方法的入参中。
不同点:
1、@RequestBody是将前端所有请求参数封装成一个大对象到后台,即一个json String对象,或者一个pojo对象,如果后台接受参数是一个pojo对象,则@RequestBody会自动将前端参数映射到pojo对象对应的属性上,content-type为application/json。此注解不可省略,否则参数无法封装到对应入参上。
2、@RequestParam,将前端的请求参数以key1=value1,key2=value2…的形式将请求参数封装到后台对应的参数上,content-type需要设置为:application/x-www-form-urlencoded,如果前端的参数和后台方法入参名称一致,则该注解可以省略不写。
4、@RequestHeader 获取RequestHeader中的信息,如登陆的token等。
这里的String id由于未加任何注解,所以等同于@RequestParam String id,即从body中获取数据,而非header中获取id。
@PostMapping("/getToken")
public Object getHeader(@RequestHeader("access_token") String token,String id){
System.out.println("token="+token+",id="+id);
return "";
}
打印结果:
token=s2fs2sdf23r309fko9f2334,id=2
5.使用HttpServletRequest接收参数
如果直接使用HttpServletRequest接收前端参数,那么前端请求参数要是key1=value1&key2=value2…形式,且contentType必须为:x-www-form-urlencoded,否则后端将接收不到参数,即HttpServletRequest对象getParameter时参数为null。
@GetMapping("/get_r")
public Object getReq(HttpServletRequest request){
String id = request.getParameter("id");
String name = request.getParameter("name");
return "id="+id+",age="+name;
}
@PostMapping("/post_r")
public Object postReq(HttpServletRequest request){
String id = request.getParameter("id");
String name = request.getParameter("name");
return "id="+id+",age="+name;
}