springmvc基础知识(4):参数传递
程序员文章站
2024-01-28 17:10:52
...
基本类型、包装类型
- 定义处理器
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/controller")
public class RegisterController {
@RequestMapping("/register.do")
public String register(String userName,int password){
System.out.println("用户名:"+userName+"\n密码:"+password);
return "success";
}
}
- 当提交的数据少时,使用方法的参数匹配接收前台提交的数据。 如这里可以接收前台提交的name=”userName”和name=”password”的数据。
- 注意,前台提交的数据都是字符串类型的,springmvc提前加载了一些默认的格式转换器,会自动根据数据进行类型转换。比如这里的password自动由字符串转换成了int类型。
- 测试页面
<%@ 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>
<form action="controller/register.do">
用户名:<input type="text" name="userName">
密码:<input type="text" name="password">
<button type="submit">提交</button>
</form>
</body>
</html>
注意:处理器中password参数定义的是Int类型的,如果前台传的参数是空的,会报错。可以使用包装类型Integer,这个允许为空。
使用@RequestParam映射数据
@RequestMapping("/register.do")
public String register(@RequestParam("userName")String name,Integer password){
System.out.println("用户名:"+name+"\n密码:"+password);
return "success";
}
使用@RequestParam将匹配到的数据绑定到参数上,这样就不需要参数直接匹配,参数名可以任意取。
也可以使用request.getParameter(“userName”);获取参数
@RequestMapping("/register.do")
public String register(HttpServletRequest request){
String userName = request.getParameter("userName");
String password = request.getParameter("password");
System.out.println("用户名:"+userName+"\n密码:"+password);
return "success";
}
数组类型
如果前台传输了多个相同name的数据,比如多选框,springmvc可以在处理器方法中使用数组参数接收这些数据。
@RequestMapping("/register.do")
public String register(String userName,Integer password,String[] hobby){
System.out.println("用户名:"+userName+"\n密码:"+password);
System.out.println("爱好:"+Arrays.asList(hobby));
return "success";
}
测试页面:
<form action="controller/register.do">
用户名 :<input type="text" name="userName">
密码 : <input type="text" name="password">
爱好 : <input type="checkbox" name="hobby" value="电影">电影
<input type="checkbox" name="hobby" value="逛街">逛街
<input type="checkbox" name="hobby" value="打游戏">打游戏
<button type="submit">提交</button>
</form>
简单对象、复杂对象
如果一次传输的数据太多,可以将之封装到实体中进行传输。
1.简单对象
- User实体类
package com.springmvc.domain;
import java.util.Arrays;
public class User {
private String userName;
private Integer password;
private String[] hobby;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getPassword() {
return password;
}
public void setPassword(Integer password) {
this.password = password;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "User [userName=" + userName + ", password=" + password
+ ", hobby=" + Arrays.toString(hobby) + "]";
}
}
- 处理器
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.springmvc.domain.User;
@Controller
@RequestMapping("/userController")
public class UserController {
@RequestMapping("/getUser.do")
public String getUser(User user){
System.out.println(user);
return "success";
}
}
直接在参数中使用实体类进行数据接收,提交的数据的name值和实体类中的属性进行匹配。
- 测试页面
<form action="userController/getUser.do">
用户名 :<input type="text" name="userName">
密码 :<input type="text" name="password">
爱好 :<input type="checkbox" name="hobby" value="电影">电影
<input type="checkbox" name="hobby" value="逛街">逛街
<input type="checkbox" name="hobby" value="打游戏">打游戏
<button type="submit">提交</button>
</form>
2.多层级对象
- ContactInfo实体类
package com.springmvc.domain;
public class ContactInfo {
private String address;
private String phone;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Address [address=" + address + ", phone=" + phone + "]";
}
}
- 在User类中引用ContactInfo类
package com.springmvc.domain;
public class User {
private String userName;
private ContactInfo contactInfo;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public ContactInfo getContactInfo() {
return contactInfo;
}
public void setContactInfo(ContactInfo contactInfo) {
this.contactInfo = contactInfo;
}
@Override
public String toString() {
return "User [name=" + userName + ", contactInfo=" + contactInfo + "]";
}
}
- 处理器
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.springmvc.domain.User;
@Controller
@RequestMapping("/userController")
public class UserController {
@RequestMapping("/getUser.do")
public String getUser(User user){
System.out.println(user);
return "success";
}
}
- 测试
<form action="userController/getUser.do">
用户名 : <input type="text" name="userName">
地址: <input type="text" name="contactInfo.address">
电话: <input type="text" name="contactInfo.phone">
<button type="submit">提交</button>
</form>
注意这里使用属性连缀的方式进行多层级数据的赋值
集合类型
可能会有这种情况:前台页面批量录入信息并提交,比如班主任批量录入学生信息.像这样一次性提交多个相同的实体类,就需要后台使用集合进行接受了。
使用List
- 需要定义一个实体类集合:
package com.test.domain;
import java.util.List;
public class UserListForm {
List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
@Override
public String toString() {
return "UserListForm [users=" + users + "]";
}
}
- 处理器:
@RequestMapping("/getUserList.do")
public String getUserList(UserListForm users){
System.out.println(users);
return "success";
}
前台访问:
http://localhost:8080/springmvc-demo/userController/getUserList.do?users[0].userName=张三&users[1].userName=李四
list会根据请求的参数自动设置长度,比如这里最大的是users[1],List长度为2,如果这时候设置了一个users[20].userName=xx,那么List长度为21,没有设置值的User会自动赋Null.
使用Map
定义一个User的map集合
package com.springmvc.domain;
import java.util.Map;
public class UserMapForm {
Map<String,User> users;
public Map<String, User> getUsers() {
return users;
}
public void setUsers(Map<String, User> users) {
this.users = users;
}
@Override
public String toString() {
return "UserListMap [users=" + users + "]";
}
}
- 处理器
@RequestMapping("/getUserMap.do")
public String getUserMap(UserMapForm users){
System.out.println(users);
return "success";
}
- 前台请求:
http://localhost:8080/springmvc-demo/userController/getUserMap.do?users[x].userName=张三&users[y].userName=李四
上一篇: MySQL逻辑备份mysqldump
下一篇: EFCore数据操作
推荐阅读
-
springmvc基础知识(4):参数传递
-
Js从头学起(基本数据类型和引用类型的参数传递详细分析)_基础知识
-
Mybatis中传递多个参数的4种方法总结
-
Mybatis中传递多个参数的4种方法总结
-
解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题
-
springmvc 传递和接收数组参数的实例
-
SpringMVC参数绑定学习总结【前后端数据参数传递】
-
SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器
-
用SpringMVC参数传递时,解决get请求时中文乱码的问题
-
SpringMVC向页面传递参数的5种方式