以下示例讲解皆是在Springboot项目下进行
1.@RequestParam注解接收参数
@RequestParam注解的4个属性:
- value:请求的参数名,如果不设置,默认为注解后的形参名。
- name:由于在源码中,name的别名是value,value的别名是name,所以name等同于value。
- required :表示该参数是否为必须,默认值为true,若请求的参数没有该参数,那么就会抛出异常。
- defaultValue:表示参数的默认值,如果设置了默认值后,required就直接为false,无论你是否设置了required值。
@RequestParam注解可以接受简单参数类型的传递(这里只的简单参数类型)
例子:
@RequestMapping("/test")
public void mytest(@RequestParam(required = true) String a,@RequestParam(value =
"bb")Integer b,@RequestParam(defaultValue = "test123")String c){
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
请求参数:
由于在 参数b那的RequestParam注解用了Value,把请求参数名改为了bb,且默认required为true,所以会有错误,错误信息如下:
修改后请求参数:
结果:
2.用@RequestBody注解接收参数
@RequestBody注解用来接收传递的Json格式的数据,且加在JAVA的实体类前来接收。一般前端请求的Content-Type为application/json方式。而且请求方式必须为POST。
例子:
实体类 User.java
public class User {
private Integer id;
private String nickname;
@Override
public String toString() {
return "User{" +
"id=" + id +
", nickname='" + nickname +
'}';
}
//GET和SET省略
}
Controller
@RequestMapping("/test2")
public void mytest2(@RequestBody User user){
System.out.println(user.toString());
}
请求:
结果:
3.使用@PathVariable占位符接收
例子:
@RequestMapping("/test3/{name}/{age}")
public void mytest3(@PathVariable String name,@PathVariable Integer age){
System.out.println(name);
System.out.println(age);
}
请求:
结果:
4.不使用注解,直接在方法中定义参数
不使用注解,直接在方法中定义参数可以实现简单对象(基本数据类型)的接收和复杂对象接收(JAVA对象等)
-
如果绑定的对象时简单类型: 调用@RequestParam来处理的。
-
如果绑定的对象时复杂类型: 调用@ModelAttribute来处理的。
Tip:无注解接收参数时,前端请求的方式应为x-www-form-urlencoded方式或把参数拼接在链接后面,或为form-data
例子
实体对象 User.java
public class User {
private Integer id;
private String nickname;
private Date asktime;
@Override
public String toString() {
return "User{" +
"id=" + id +
", nickname=" + nickname +
'}';
}
//GET和SET省略
}
Controller:
@RequestMapping("/test4")
public void mytest4(User user,String a,String nickname){
System.out.println(user.toString());
System.out.println(a);
System.out.println(nickname);
}
请求:
结果:
如上图所示,接收类型为JAVA对象的时候会把参数自动绑定,只要参数名和对象中的属性名一致即可。简单的基本类型时,也是请求的参数名和方法里的参数名对上即可自动绑定。