获取请求
简单参数
1.原始方式:通过HttpServletRequest 对象手动获取。
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(HttpServletRequest request){
String name= request.getParameter("name");
String age= request.getParameter("age");
System.out.println(name + ":"+age);
return "hello";
}
}
2.SpringBoot方法:参数名与形参变量名相同,定义形参即可接收参数
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(String name,int age){
System.out.println(name + ":"+age);
return "hello";
}
}
当参数名字对应不上,我们是收不到这个参数的,但不会报错。
这时候我们可以通过注解: @RequestParam ,将注解加在参数前面完成映射
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(@RequestParam(name="name") String username, int age){
System.out.println(username + ":"+age);
return "hello";
}
}
注意事项
● @RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false。
@RequestParam(name="name",required=false)
实体参数
当简单参数太多时,简单参数传递方法太繁琐,于是就可以将参数封装在实体对象中。
实体对象参数:请求参数名与形参对象属性名相同,定义POJO实体类接收即可
@RequestMapping("/simplePojo")
public String simplePojo(User user){
System.out.println(user);
return "OK";
}
//实体类
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
复杂实体对象:
数组集合参数
数组参数:
请求参数名和形参数组名称相同且请求参数为多个,定义数组类型即可接收参数
@RequestMapping("/arrayParam")
public String arrayParam(String[]hobby){
System.out.println(Arrays.toString(hobby));
return"OK";
}
集合参数:
请求参数名和集合变量名相同,但是要通过@RequestParam绑定参数
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){
System.out.println(hobby);
return "OK";
}
日期时间参数
使用@DataTimeFormat注解完成日期参数类型转换
@RequestMapping("/dataParam")
public String dataParam(@DateTimeFormat(pattern = "yyyy年MM月dd日 HH时mm分ss秒") LocalDateTime updateTime){
System.out.println(updateTime);
return "OK";
}
json参数
JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参可接收参数,需要使用@RequestBody标识
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody jsonUser user){
System.out.println(user);
return "OK";
}
路径参数
通过请求URL来直接传递参数,使用[...]来标识该路径参数,需要使用@PathVariable获取路径参数
就像上图末尾的/1,既是请求参数,也是路径的一部分。
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id){
System.out.println(id);
return "OK";
}
获取多个参数操作类似
@RequestMapping("/path/{id}/{name}")
public String pathParam(@PathVariable Integer id,@PathVariable String name){
System.out.println(id);
return "OK";
}
响应数据
@ResponseBody
- 类型:方法注解、类注解
- 位置:Controller方法上/类上
- 作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应
- 说明: @RestController = @Controller + @ResponseBody
响应结果各式各样,为了便于维护管理,通常会设置一个统一响应结果 Result
public class Result
{
//响应码 ,0代表失败,1代表成功
private Integer code;
//提示信息
private String msg
//返回的数据
private Object data;
}