在处理方法入参的时候使用@RequestMapping可以将请求参数传递给请求方法
例如,在这个请求方法中,public String test(@RequestParam(“uid”) Integer id);会将请求中key为uid的参数赋值给方法id这个参数,如果请求中不带uid这个参数,就会报错,但是可以通过配置@RequestPatam的属性,将某一个属性设置为不是必须的。
@RequestMapping("/param")
public String test(@RequestParam(value = "uid", required = false) Integer id){
return "hello";
}
public String test(@RequestParam(value = “uid”, required = false) Integer id), 将required的值设置为false,那么就算请求参数中没有这个参数uid,也不会报错。
请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中
例如:public String test1(@RequestHeader(“Accept-Encoding”) String encoding);获取请求头中Accept-Encoding所带的值,如果没有带则会报错,可以通过设置required属性修改
@RequestMapping("/param1")
public String test1(@RequestHeader(value = "Accept-Encoding" ) String encoding){
System.out.println(encoding);
return "hello";
}
@CookieValue 可让处理方法入参绑定某个 Cookie 值。
获取某个cookie的值,并将这个值给对应的参数。
@RequestMapping("/cookie")
public String cookieTest(@CookieValue("JSESSIONID") String session){
System.out.println(session);
return "hello";
}
获取浏览器中JSESSIONID的值,如果浏览器中没有JSESSIONID就直接请求,那么将会报错。同样,可以通过设置required值,来说明这个参数是否必须存在。
@RequestMapping("/cookie")
// 不一定必须存在这个cookie
public String cookieTest(@CookieValue(value = "JSESSIONID", required = false) String session){
System.out.println(session);
return "hello";
}
上边介绍的是通过注解的方式,为参数映射值,还可以使用 POJO 对象绑定请求参数值。
创建两个实体类,一个是People类,一个是Department类,People类中有个Department类型的属性。
People.java
public class People {
private String name;
private Integer age;
private Department department;
Department.java
public class Department {
private Integer id;
private String departmentName;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>People</title>
</head>
<body>
<form action="/addPeople" method="post">
姓名:<input name="name" type="text"/><br>
年龄: <input name="age" type="text"/><br>
<input type="submit" value="提交" >
</form>
</body>
</html>
表单中,输入表单的name属性要与POJO类的属性一一对应,这样SpringMVC才能获取对应的值,装配到POJO中。
例如,我上边写的,运行起来,效果如下
在浏览器中添加:
提交之后,控制台输出:
因为,输入表单中没有输入与department对应的值,所以 department 属性为null,为类类型的属性赋值,需要用到级联属性。
为类类型属性赋值,输入框的name属性值为 “类类型属性名.属性”,在这个例子中,类类型属性是 department ,为这个属性赋值,使用 department.这个类对应的属性名称 ,比如:department .id;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>People</title>
</head>
<body>
<form action="/addPeople" method="post">
姓名:<input name="name" type="text"/><br>
年龄: <input name="age" type="text"/><br>
部门id:<input name="department.id" /><br>
部门名字:<input name="department.departmentName" /><br>
<input type="submit" value="提交" >
</form>
</body>
</html>
提交之后,控制台输出
除了以上方式之外,使用 Servlet API 作为入参
// 使用原生WEB的API
@RequestMapping("/param03")
public String test04(HttpServletRequest request, HttpSession session){
request.setAttribute("req", "我是请求域中的值");
session.setAttribute("ses", "我是Session中的值");
return "success";
}