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注解