欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微服务[v1.0.0][Spring MVC常用注解之@RequestParam]

程序员文章站 2022-04-17 09:13:20
org.springframework.web.bind.annotation.RequestParam注解用于将指 定的请求参数赋值给方法中的形参, 使用@RequestParam注解可指定如下表所示的属性...

@RequestParam注解

org.springframework.web.bind.annotation.RequestParam注解用于将指 定的请求参数赋值给方法中的形参, 使用@RequestParam注解可指定如下表所示的属性

属性 类型 是否必要 说明
name String 指定请求参数绑定的名称
value String name属性的别名
required boolean 指示参数是否必须绑定
defaultVale String 如果没有产地参数而使用的默认值

请求处理方法参数的可选类型为Java基本数据类型和String,示例代码如下:

@RequestMapping(value="/login")
public ModelAndView login(@RequestParam("loginname") String loginname, @ReqeustParam("password") String password){
		return ...;
	}

然后,例如请求连接为http://localhost:8080/context/login?loginname=davieyang&password=111111,请求中的davieyang就会赋给loginname变量,password的参数值111111赋给password,如果请求中不包含“loginname”参数,则将产生异常,因此,如果不能保证存在“loginname”参数,建议使用:@RequestParam(value="loginname", required=false)

@RequestParam注解还可以这样写:@RequestParam(value="loginname", required=true, defaultValue="admin")其中required参数不是必须的,默认值为ture

@RequestMapping和@RequestParam注解的使用

package org.davieyang.domain;

import java.io.Serializable;

// 域对象,实现序列化接口
public class User implements Serializable{
	
	private static final long serialVersionUID = 1L;
	
	// 私有字段
	private String loginname;
	private String password;
	private String username;
	
	// 公共构造器
	public User() {
		super();
	}
	// set/get方法
	public String getLoginname() {
		return loginname;
	}
	public void setLoginname(String loginname) {
		this.loginname = loginname;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
}

User是一个域对象,用来接收并封装从前台页面传递过来的数据

package org.davieyang.controller;

import java.util.ArrayList;
import java.util.List;
import org.fkit.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

// Controller注解用于指示该类是一个控制器,可以同时处理多个请求动作
@Controller
// RequestMapping可以用来注释一个控制器类,此时,所有方法都将映射为相对于类级别的请求, 
// 表示该控制器处理所有的请求都被映射到 value属性所指示的路径下
@RequestMapping(value="/user")
public class UserController{
	
	// 静态List<User>集合,此处代替数据库用来保存注册的用户信息
	private static List<User> userList;
	
	// UserController类的构造器,初始化List<User>集合
	public UserController() {
		super();
		userList = new ArrayList<User>();
	}

	// 该方法映射的请求为http://localhost:8080/context/user/register,该方法支持GET请求
	@GetMapping(value="/register")
	 public String registerForm() {
		System.out.println("register GET方法被调用...");
		 // 跳转到注册页面
	     return "registerForm";
	 }
	
	// 该方法映射的请求为http://localhost:8080/RequestMappingTest/user/register,该方法支持POST请求
	 @PostMapping(value="/register")
	 // 将请求中的loginname参数的值赋给loginname变量,password和username同样处理
	 public String register(
			 @RequestParam("loginname") String loginname,
			 @RequestParam("password") String password,
			 @RequestParam("username") String username) {
		 System.out.println("register POST方法被调用...");
		 // 创建User对象
		 User user = new User();
		 user.setLoginname(loginname);
		 user.setPassword(password);
		 user.setUsername(username);
		 // 模拟数据库存储User信息
		 userList.add(user);
		 // 跳转到登录页面
	     return "loginForm";
	 }
	 
	// 该方法映射的请求为http://localhost:8080/RequestMappingTest/user/login
	 @RequestMapping("/login")
	 public String login(
			// 将请求中的loginname参数的值赋给loginname变量,password同样处理
			 @RequestParam("loginname") String loginname,
			 @RequestParam("password") String password,
			 Model model) {
		 System.out.println("登录名:"+loginname + " 密码:" + password);
		 // 到集合中查找用户是否存在,此处用来模拟数据库验证
		 for(User user : userList){
			 if(user.getLoginname().equals(loginname) 
					 && user.getPassword().equals(password)){
				 model.addAttribute("user",user);
				 return "welcome";
			 }
		 }
	     return "loginForm";
	 }
}

UserController类的代码解释如下:

  • UserController类使用了@Controller注解,是一个控制器类
  • 在UserController类上面使用了@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: 8080/RequestMappingTest/user/login,这里没有设置method属性,表示支 持所有方式的请求。该方法也使用@RequestParam注解将指定的请求参 数赋值给方法中的形参。之后到集合中查找用户是否存在,此处用来模 拟数据库验证。login方法中还有一个参数Model对象,调用该对象的 addAttribute方法可以将数据添加到request当中。最后,如果用户登录成 功则返回字符串 welcome,并跳转到welcome.jsp欢迎页面;登录失败则 返回字符串 loginForm,并跳转到loginForm.jsp登录页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册页面</title>
</head>
<body>
<h3>注册页面</h3>
<form action="register" method="post">
     <table>
         <tr>
         	<td><label>登录名: </label></td>
             <td><input type="text" id="loginname" name="loginname" ></td>
         </tr>
         <tr>
         	<td><label>密码: </label></td>
             <td><input type="password" id="password" name="password"></td>
         </tr>
         <tr>
         	<td><label>真实姓名: </label></td>
             <td><input type="text" id="username" name="username" ></td>
         </tr>
         <tr>
             <td><input id="submit" type="submit" value="注册"></td>
         </tr>
     </table>
</form>
</body>
</html>

registerForm.jsp是一个注册页面,用户可以在这里输入登录名、密 码和真实姓名,该表单被提交到register请求。注意,这里使用的是 POST方式,响应请求的是UserController类的register方法

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body>
<h3>登录页面</h3>
<form action="login" method="post">
     <table>
         <tr>
         	<td><label>登录名: </label></td>
             <td><input type="text" id="loginname" name="loginname" ></td>
         </tr>
         <tr>
         	<td><label>密码: </label></td>
             <td><input type="password" id="password" name="password"></td>
         </tr>
         <tr>
             <td><input id="submit" type="submit" value="登录"></td>
         </tr>
     </table>
</form>
</body>
</html>

loginForm.jsp是一个登录页面,用户可以在这里输入登录名和密 码,该表单被提交到login请求。这里使用的是POST方式,响应请求的是UserController类的login方法

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试@RequestMapping注解</title>
</head>
<body>
<!-- 页面可以访问Controller传递传递出来的模型User对象 -->
欢迎[${requestScope.user.username }]登陆
<br>
</body>
</html>

welcome.jsp是一个欢迎页面,用户登录成功后跳转到该页面,该页 面使用了EL表达式访问request当中的user对象的username属性,此外,还需要在web.xml文件中配置Spring MVC的前端控制器 DispatcherServlet,因为每次配置基本相同,此处不再赘述,自行配置即可,同时Spring MVC还需要springmvc-config.xml配置文件,该文件内容 和ControllerTest项目中的springmvc-config.xml文件内容一致,读者可自 行配置

部署RequestMappingTest这个Web应用,在浏览器中输入如URL:http://localhost:8080/RequestMappingTest/user/register来测试应用,可看到下图所示页面表示Spring MVC 成功跳转到注册页面 registerForm.jsp
微服务[v1.0.0][Spring MVC常用注解之@RequestParam]
输入登录名“test”,密码“123456”,真实姓名“测试用户”,单击“注 册”按钮。请求将会被提交到UserController类的register方法进行注册, 注册的用户信息会被保存到UserController类的userList静态集合中。若 注册成功,将会跳转到如下图所示页面
微服务[v1.0.0][Spring MVC常用注解之@RequestParam]
输入登录名“test”,密码“123456”,单击“登录”按钮。请求将会被提交到UserController类的login方法进行登录验证,若验证成功,将会跳转到如下图所示页面
微服务[v1.0.0][Spring MVC常用注解之@RequestParam]

本文地址:https://blog.csdn.net/dawei_yang000000/article/details/109264307