Spring MVC Controller 接收请求参数的方式有很多种,有的适合 get 请求方式,有的适合 post 请求方式,有的两者都适合。主要有以下几种方式:
- 通过实体 Bean 接收请求参数
- 通过处理方法的形参接收请求参数
- 通过 HttpServletRequest 接收请求参数
- 通过 @PathVariable 接收 URL 中的请求参数
- 通过 @RequestParam 接收请求参数
- 通过 @ModelAttribute 接收请求参数
@RequestParam
是传递参数的,是通过URL头部进行传输,对应传输的内容会体现在对应的URL上
@RequestParam用于将请求参数区数据映射到功能处理方法的参数上
public String ccc(@RequestParam(value="name" ,required =false ,defaultValue=“zhang”) String name)
例如:127.0.0.1:8080/SpringMvc/hello?name=cmj,age=10这种方式进行,这个为get请求
测试时,可以通过postman进行前端测试,一定要记住,该请求为get请求;
@RequestParam注解传参格式
value:参数名字,即入参的请求参数名字,如name表示请求的参数区中的名字为name的参数的值将传入;
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;可以将值改为false,表示请求中可以传空参数,当未填写对应参数时,则会直接传出null
defaultValue:默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,表示可以自行定义对应的默认值
格式:
public String ccc(@RequestParam(value="name" ,required =false ,defaultValue=“zhang”) String name)
其中,
这个中的name必须与前端传过来的名称相一致,也应该为“name”
通过@PathVariable接收URL中的请求参数
这个就是为RestFul风格的传递方式,通过url直接将对应的id等传进来
@GetMapping("/{no}")
public User get(@PathVariable(value = "no") String no) {
return null;
}
通过@RequestBody接收
像一般比较多的属性值,都是通过Body进行传入
例如新增与修改,一般都是由body进来
修改时,通过ID查询,id可以有url进来,这样更清晰的看出来需要修改是哪个
@RestController//相当于给所有方法都加上了@responseBody
@RequestMapping("/param")
public class ParamController {
@PostMapping
public String add(@RequestBody User user) {
return "成功";
}
@DeleteMapping
public String del(@RequestParam(value ="no",defaultValue = "1",required = true) String no) {
return "成功";
}
@PutMapping("/{no}")//user中不会有no这个属性,直接通过URL中的path变量中来
public String edit(@RequestBody User user,@PathVariable(value = "no") String no ) {
return "成功";
}
@GetMapping("/{no}")
public User get(@PathVariable(value = "no") String no) {
return null;
}
}
@CookieValue绑定Cookie数据值(一般很少用,)
@CookieValue用于将请求的Cookie数据映射到功能处理方法的参数上。
public String test(@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)
如上配置将自动将JSESSIONID值入参到sessionId参数上,defaultValue表示Cookie中没有JSESSIONID时默认为空。
public String test2(@CookieValue(value="JSESSIONID", defaultValue="") Cookie sessionId)
传入参数类型也可以是javax.servlet.http.Cookie类型
测试代码在CookieValueTypeController中。@CookieValue也拥有和@RequestParam相同的三个参数,含义一样。
@RequestHeader绑定请求头数据
@RequestHeader用于将请求的头信息区数据映射到功能处理方法的参数上。一般是
@RequestMapping(value="/header")
public String test(
@RequestHeader("User-Agent") String userAgent,
@RequestHeader(value="Accept") String[] accepts)
如上配置将自动将请求头“User-Agent”值入参到userAgent参数上,并将“Accept”请求头值入参到accepts参数上。测试代码在HeaderValueTypeController中。
@RequestHeader也拥有和@RequestParam相同的三个参数,含义一样。
也可通过实例对象进行调用对应参数
先新建一个类,在改类下,生成对应的get、set方法,无参构造、有参构造方法、重新他的toString方法
package com.cmj.entier;
public class ceshi {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public ceshi() {
super();
}
public ceshi(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "ceshi [name=" + name + ", age=" + age + "]";
}
}
并且在对应的controller中创建对应的映射,首先我们要注意的是,如果我们要直接获得类中的对应属性值,就可以直接通过类名进行获取,就可将该类下方属性值,都获取到
@RequestMapping("/ccc1")
public String ccc1(ceshi ce) {
System.out.println(ce);
return null;
}