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)

其中,

Spring注解中 SPEL 取 Map中的值 spring获取参数的注解_处理方法

这个中的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方法

Spring注解中 SPEL 取 Map中的值 spring获取参数的注解_http_02

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中创建对应的映射,首先我们要注意的是,如果我们要直接获得类中的对应属性值,就可以直接通过类名进行获取,就可将该类下方属性值,都获取到

Spring注解中 SPEL 取 Map中的值 spring获取参数的注解_java_03

@RequestMapping("/ccc1")
	public String ccc1(ceshi ce) {
		System.out.println(ce);
		return null;
		
	}