3.3 @RequestParam注解
org.springframework.web.bind.annotation.RequestParam注解用于将指定的请求参数赋值给方法中的形参。
使用@RequestParam注解可指定如下表所示的属性。
| 属性 | 类型 | 是否必要 | 说明 | ||
|---|---|---|---|---|---|
name |
String |
否 | 指定请求参数绑定的名称 | ||
value |
String |
否 | name属性的别名 |
||
required |
boolean |
否 | 指定参数是否必须绑定 | ||
dafaultValue |
String |
否 | 如果没有传递参数而使用的默认值 | ||
请求处理方法参数的可选类型为Java基本数据类型和String。 |
|||||
| 示例代码如下: | |||||
|
假设请求如下:
1 | http://localhost:8080/context/login?loginname=jack&password=123456 |
以上代码会将请求中的loginname参数的值"jack"赋给loginname变量, password参数的值"123456"赋给password变量。
需要注意的是,如果请求中不包含"loginname"参数,则将产生异常!因此,如果不能保证存在"loginname"参数,建议使用:@RequestParam(value="loginname", required= false)@RequestParam注解还有如下写法:@RequestParam(value="loginname", required=true, defaultValue="admin");
其中required参数默认值为true,所以这里可以省略required=true这个参数。
示例 @RequestMapping和@RequestParam注解的使用
新建一个项目RequestMappingTest,加入所需的jar文件,示例代码如下:
User.java
1 | package org.fkit.domain; |
User是一个域对象,用来接收并封装从前台页面传递过来的数据。
UserController.java
1 | package org.fkit.controller; |
UserControlller类的代码解释如下:
UserController类使用了@Controlller注解,是一个控制器类。- 在
UserControlller类上面使用了@RequestMapping(value="/user")注解,表示该控制器处理的所有请求都被映射到/user路径下。 - 本例没有使用数据库存储用户注册信息,所以定义了一个静态的
List集合userList用来代替数据库存储用户数据。 registerForm方法使用了@GetMapping(value="/register")注解,表示该方法映射的请求为http://localhost:8080/RequestMappingTest/user/register,并且只支持GET请求。该方法返回字符串"registerForm",参考springmvc-config.xml中的视图解析器的配置信息,可以知道该方法只是跳转到registerForm.jsp注册页面register方法使用了@PostMapping(value="/register")注解,表示该方法映射的请求为http://localhost:8080/RequestMappingTest/user/register并且只支持POST请求。该方法使用@RequestParam注解将指定的请求参数赋值给方法中的形参,之后创建了一个User对象保存用户传递的注册信息,最后将User对象存储到userList集合中,然后登录页面就可以到userList集合中进行用户登录业务逻辑的判断。该方法返回字符串loginForm,这样会跳转到loginForm.jsp登录页面。- 提示:
registerForm方法和register方法虽然映射的请求一样,但是registerForm方法支持的是GET请求,而register方法支持的是POST请求。
- 提示:
login方法使用了@RequestMapping("/login")注解,表示该方法映射的请求为http://localhost/RequestMappingTest/user/login,这里没有设置method属性,表示支持所有方式的请求。该方法也使用@RequestParam注解将指定的请求参数赋值给方法中的形参。之后到集合中査找用户是否存在,此处用来模拟数据库验证login方法中还有一个参数Model对象,调用该对象的addAttribute方法可以将数据添加到request当中。最后,如果用户登录成功则返回字符串welcome,并跳转到welcomejsp欢迎页面;登录失败则返回字符串loginForm,并跳转到loginForm.jsp登录页面.
registerForm.jsp
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
registerForm.jsp是一个注册页面,用户可以在这里输入登录名、密码和真实姓名,该表单被提交到register请求。注意,这里使用的是POST方式,响应请求的是UserController类的register方法。
loginForm.jsp
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
lognForm.jsp是一个登录页面,用户可以在这里输入登录名和密码,该表单被提交login请求。这里使用的是POST方式,响应请求的是UserControlller类的login方法。
welcome.jsp
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
welcome.jsp是一个欢迎页面,用户登录成功后跳转到该页面,该页面使用了EL表达式访问request当中的user对象的username属性
此外,还需要在web.xml文件中配置Spring MVC的前端控制器DispatcherServlet,因为每次配置基本相同,此处不再赘述,读者可自行配置.
同时Spring MVC还需要springmvc-config.xml配置文件,ControllerTest项目中的springmvc-config.xml文件内容一致.读者可以自行配置。
测试
部署RequestMappingTest这个Web应用,在浏览器中输入如下URL来测试应用:
1 | http://localhost:8080/RequestMappingTest/user/register |
- 此时可以在浏览器上看到
注册页面,表示Spring MVC成功跳转到注册页面registerForm.jsp. - 输入登录名
"test",密码"123456",真实姓名"测试用户",单击"注册"按钮。请求将会被提交到UserControlller类的register方法进行注册,注册的用户信息会被保存到UserController类的userList静态集合中。若注册成功,将会跳转到登录页面。 - 输入登录名
"test",密码"123456",单击"登录"按钮。请求将会被提交到UserController类的login方法进行登录验证,若验证成功,将会跳转到欢迎页面.
原文链接: 3.3 @RequestParam注解