Spring MVC @RequestParam注解

org.springframework.web.bind.annotation包下 @RequestParam 注解,该注解类型用于将指定的请求参数赋值给方法中的形参。那么@RequestParam注解有什么属性呢?它有4种属性,下面将逐一介绍这四种属性:
1、name属性
该属性的类型是String类型,它可以指定请求头绑定的名称;

2、value属性
该属性的类型是String类型,它可以设置是name属性的别名;

3、required属性
该属性的类型是boolean类型,它可以设置指定参数是否必须绑定;

4、defalutValue属性
该属性的类型是String类型,它可以设置如果没有传递参数可以使用默认值。

请求处理方法参数的可选类型位Java的8种基本数据类型和String。如下示例伪代码:

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

假设请求如下:http://localhost:8088/springmvc-comment1/login?loginname=qianch&password=123456
以上代码会将请求中的loginname参数的值“qianch”赋给loginname变量,password参数的值“123456”赋给password变量。

下面将通过案例演示@RequestMapping和@RequestParam注解的应用。
在项目的“src/main/java”下创建一个包,包名叫“com.qianchunhua.domain”,在包下创建User类,该类是一个域对象,主要用于封装前台页面传来的数据。如下代码:

package com.qianchunhua.domain;

import java.io.Serializable;
// 域对象,实现序列化接口
public class User implements Serializable{

    // 私有字段
    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;
    }

}

在刚才创建的“com.qianchunhua.controller”包下再创建一个UserController类,该类主要模拟用户的注册。代码如下:

package com.qianchunhua.controller;

import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.qianchunhua.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
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>();
    }
    // 静态的日志类LogFactory
    private static final Log logger = LogFactory
            .getLog(UserController.class);

    // 该方法映射的请求为http://localhost:8088/springmvc-comment1/user/register,该方法支持GET请求
    @RequestMapping(value="/register",method=RequestMethod.GET)
     public String registerForm() {
         logger.info("register GET方法被调用...");
         // 跳转到注册页面
         return "registerForm";
     }

    // 该方法映射的请求为http://localhost:8088/springmvc-comment1/user/register,该方法支持POST请求
     @RequestMapping(value="/register",method=RequestMethod.POST)
     // 将请求中的loginname参数的值赋给loginname变量,password和username同样处理
     public String register(
             @RequestParam("loginname") String loginname,
             @RequestParam("password") String password,
             @RequestParam("username") String username) {
         logger.info("register POST方法被调用...");
         // 创建User对象
         User user = new User();
         user.setLoginname(loginname);
         user.setPassword(password);
         user.setUsername(username);
         // 模拟数据库存储User信息
         userList.add(user);
         // 跳转到登录页面
         return "loginForm";
     }

    // 该方法映射的请求为http://localhost:8088/springmvc-comment1/user/login
     @RequestMapping("/login")
     public String login(
            // 将请求中的loginname参数的值赋给loginname变量,password同样处理
             @RequestParam("loginname") String loginname,
             @RequestParam("password") String password,
             Model model) {
         logger.info("登录名:"+loginname + " 密码:" + password);
         // 到集合中查找用户是否存在,此处用来模拟数据库验证
         for(User user : userList){
             if(user.getLoginname().equals(loginname) && user.getPassword().equals(password)) {
                 model.addAttribute("user",user);
                 return "welcome";
             }
         }
         return "loginForm";
     }

}

UserController类的代码解释如下:
(1)UserController类使用了@Controller注解,是一个控制器类;
(2)UserController类上面使用了@RequestMapping(value=”/user”)注解,表示该控制器处理的所有请求都被映射到user路径下;
(3)本来没有使用数据库存储用户注册信息,所以定义了一个静态的List集合userList来代替数据库存储用户数据;
(4)registerForm方法使用了@RequestMapping(value=”/register”,method=RequestMethod.GET)注解,表示该方法映射的请求为http://localhost:8088/springmvc-comment1/user/register,并且只支持GET请求。该方法返回字符串“registerForm”,参考springmvc-config.xml中的配置信息,可以知道该方法只是跳转到registerForm.jsp注册页面;
(5)register方法使用了@RequestMapping(value=”/register”,method=RequestMethod.POST)注解,表示该方法映射的请求为http://localhost:8088/springmvc-comment1/user/register,并且只支持POST请求。该方法使用@RequestParam注解将指定的请求参数赋值给方法中的形参,之后创建了一个User对象保存用户传递的注册信息,最后将User对象存储到userList集合当中,之后的登录页面就可以到userList集合当中进行用户登录业务逻辑判断。该方法返回字符串“loginForm”,并跳转到loginForm.jsp登录页面;
(6)login方法使用了@RequestMapping(“/login”)注解,表示该方法映射的请求为http://localhost:8088/springmvc-comment1/user/login ,这里没有设置method属性表示支持所有方式的请求。该方法也使用@RequestParam注解将指定的请求赋值给方法中的形参。之后到集合中查找用户是否存在,此处用来模拟数据库验证。login方法中海油一个参数Model对象,调用该对象的addAttribute方法可以将数据添加到request当中。最后,如果用户登录成功则返回字符串“loginForm”,并跳转到loginForm.jsp页面。

我们需要在项目的content文件夹下,创建一个registerForm.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方法。

REF

https://blog.csdn.net/qq_42223653/article/details/90486584

原文地址:https://www.cnblogs.com/emanlee/p/15754237.html