一、首先比较这两个注解@RequestParam和@PathVariable的区别,它们都是用于request请求接受参数只用。
- @RequestParam是从请求体重获取参数值
@ResponseBody
@RequestMapping(value = "/h",method = RequestMethod.GET)
public Map<String,Object> login( @RequestParam Integer param){
Map map = new HashMap() ;
switch (param){
case 0:
map.put("msg","你是邱工么");
break;
case 1:
map.put("msg","你真的是邱工么");
break;
case 2:
map.put("msg","是的 我是邱工");
break;
case 3:
map.put("msg","hello! 邱工");
break;
case 4:
map.put("msg","邱工哈哈");
break;
case 5:
map.put("msg","邱工呵呵");
break;
default:{
map.put("msg","邱工是个女的!");
break;
}
}
return map ;
}
get方式请求
http://localhost:8000/login/h?param = 3
post方式请求
http://localhost:8000/login/h
@ResponseBody
@RequestMapping(value = "/h",method = RequestMethod.POST)
public Map<String,Object> login( @RequestParam Integer param){
Map map = new HashMap() ;
switch (param){
case 0:
map.put("msg","你是邱工么");
break;
case 1:
map.put("msg","你真的是邱工么");
break;
case 2:
map.put("msg","是的 我是邱工");
break;
case 3:
map.put("msg","hello! 邱工");
break;
case 4:
map.put("msg","邱工哈哈");
break;
case 5:
map.put("msg","邱工呵呵");
break;
default:{
map.put("msg","邱工是个女的!");
break;
}
}
return map ;
}
- @PathVariable是从url中获取请求值
get方式请求
@ResponseBody
@RequestMapping(value = "/h/{param}",method = RequestMethod.GET)
public Map<String,Object> login1( @PathVariable Integer param){
Map map = new HashMap() ;
switch (param){
case 0:
map.put("msg","你是邱工么");
break;
case 1:
map.put("msg","你真的是邱工么");
break;
case 2:
map.put("msg","是的 我是邱工");
break;
case 3:
map.put("msg","hello! 邱工");
break;
case 4:
map.put("msg","邱工哈哈");
break;
case 5:
map.put("msg","邱工呵呵");
break;
default:{
map.put("msg","邱工是个女的!");
break;
}
}
return map ;
}
请求地址格式:http://localhost:8000/login/h/{param}
http://localhost:8000/login/h/0
二、@ResponseBody和@RequestBody两者的作用以及如何使用的?
1、@ResponseBody的作用是将java数据格式转换为JSON数据格式 (后台 -> 前台)
如果控制类使用的是@Controller那么函数上一定需要加@ResponseBody,不然会报错
@ResponseBody
@PostMapping("/pwd2")
public Map loginByPwd1(@RequestBody PostUserBean postUserBean)
2、@RequestBody 将前台JSON 对象数据转换为后台可处理数据 (前台 -> 后台)
1.如果参数时放在请求体中,application/json传入后台的话,那么后台要用@RequestBody才能接收到;
2.如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或者形参前 什么也不写也能接收。
3.如果参数前写了@RequestParam(xxx),那么前端必须有对应的xxx名字才行(不管其是否有值,当然可以通过设置该注解的required属性来调节是否必须传),如果没有xxx名的话,那么请求会出错,报400。
@ResponseBody
@PostMapping("/pwd2")
public Map loginByPwd1(@RequestBody PostUserBean postUserBean){
Map map = new HashMap() ;
if (postUserBean == null || postUserBean.getName() == null ||!postUserBean.getName().equals("邱工")){
map.put("msg","请传入{“Name:邱工”}");
} else {
map.put("classInfo",classInfoBean.userInfo());
}
return map;
}
三、@PathParam和@RequestParam具有相同的使用,都是重request的请求中获取值,@RequestParam属于Spring,@PathParam是在javax.websocket.server这个包下的类。