0%

springboot获取参数集中方式

1、通过json获取参数
2、请求路径参数@PathVariable
3、@RequestParam的使用
4、@RequestBody

1 通过json获取参数

通过浏览器的url为后端控制层函数赋值,通过注解@responseBody 将java对象转换为json格式的数据返回给前端页面。

@ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。一般在异步获取数据时使用【也就是AJAX】。

后端Controller层代码如下:

1
2
3
4
5
6
7
8
@RequestMapping("/param")
@ResponseBody
public Map<String,Object> demo1(String name,int age){
Map<String,Object> paramMap=new HashMap<String,Object>();
paramMap.put("name",name);
paramMap.put("age",age);
return paramMap;
}

前端浏览器请求为:
http://localhost:8080/param?name=zhangsan&age=14

之后前端返回的Json数据为
{“name”:zhangsan,“age”:14}

2 请求路径参数@PathVariable

获取路径参数。即前端浏览器发起url/{id}请求的这种形式。
后端Controller层代码如下:

1
2
3
4
5
6
7
8
@RequestMapping("/param/{name}/{age}")
@ResponseBody
public Map<String,Object> demo2(@PathVariable("name") String name , @pathVariable("age") int age){
Map<String,Object> paramMap=new HashMap<String,Object>();
paramMap.put("name",name);
paramMap.put("age",age);
return paramMap;
}

其中@PathVariable(value = “name”, required = false)中有value和required两个参数,第一个即为指定传递的参数,第二个为该参数是否必须,若为false则可以在前端不传入该参数,默认为null空值。

3 @RequestParam的使用

使用@RequestParm用于绑定controller上的参数,可以是多个参数,也可以是一个Map集合,GET,POST均可;

语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
value:参数名
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值

1
2
3
4
5
6
7
8
@RequestMapping("/param/{name}/{age}")
@ResponseBody
public Map<String,Object> demo2(@RequestParam("name") String name , @RequestParam("age") int age){
Map<String,Object> paramMap=new HashMap<String,Object>();
paramMap.put("name",name);
paramMap.put("age",age);
return paramMap;
}

@RequestParam 和@PathVariable 之间的区别:
@RequestParam 用来获得静态URL中传入的参数,@PathVariable 用来获得动态URL中的参数

4 @RequestBody

@RequestBody绑定的是一个对象实体,将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

1
2
3
1) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定
到要返回的对象上;
2) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

使用方法:

1
2
3
4
5
6
7
8
@Controller
@RequestMapping(value = "user/login")
@ResponseBody
// 将ajax(datas)发出的请求写入 User 对象中
public User login(@RequestBody User user) {
// 这样就不会再被解析为跳转路径,而是直接将user对象写入 HTTP 响应正文中
return user;
}

或者:

1
2
3
4
5
6
@PostMapping(value = "requestBody")
@ResponseBody
public User requestBody(@RequestBody User user){
System.out.println("user:"+user.getName());
return user;
}

request的body部分的数据编码格式由header部分的Content-Type指定;

@RequestBody不支持Get请求?(存疑)因为get请求没有HttpEntity。