在学习 SpringMVC 的过程中,数据传递是核心知识点之一。本文结合实际代码案例,总结 SpringMVC 中常用的数据提交与接收方式。
核心实体类设计
首先定义了两个实体类用于数据封装:
Account 类:用于表示账户信息,包含余额属性
java
package cn.bdu.model;
public class Account {
private Double balance;
// getter、setter 和 toString 方法
}
User 类:用户信息类,包含基本信息和关联的账户信息
java
package cn.bdu.model;
import java.util.List;
public class User {
private String name;
private String password;
private Account account; // 单个账户
private List<Account> accounts; // 账户列表
// getter、setter 和 toString 方法
}
SpringMVC 控制器设计
控制器 UserController
负责接收客户端请求并处理,通过 @Controller
注解标识,使用 @RequestMapping
指定请求路径。
java
@Controller
@RequestMapping("/user")
public class UserController {
// 处理各种请求的方法
}
三种数据传递方式
1. 基础请求处理(无参数)
最简单的请求处理方式,仅用于执行特定操作,不涉及参数传递:
java
@RequestMapping("/add")
public String add(){
System.out.println("add方法执行...");
return "suc"; // 返回视图名称
}
访问路径:/user/add
,执行后返回名为 "suc" 的视图。
2. 实体类封装传递
通过实体类自动封装请求参数,SpringMVC 会根据参数名与实体类属性名的对应关系自动赋值:
java
@RequestMapping("/save2")
public String save2(User user){
System.out.println(user); // 直接使用封装好的对象
return "suc";
}
前端表单(注意参数名与实体类属性的对应关系):
html
<!-- 基础属性 -->
用户名:<input type="text" name="name"><br>
密码:<input type="text" name="password"><br>
<!-- 关联对象属性(使用对象.属性名) -->
金额:<input type="number" name="account.balance"><br>
<!-- 集合对象属性(使用集合[索引].属性名) -->
金额1:<input type="number" name="accounts[0].balance"><br>
金额2:<input type="number" name="accounts[1].balance"><br>
3. Servlet API 方式
直接使用 HttpServletRequest 对象获取参数,适合熟悉 Servlet 编程的开发者:
java
@RequestMapping("/save3")
public String save3(HttpServletRequest request, HttpServletResponse response){
String name = request.getParameter("name");
String password = request.getParameter("password");
System.out.println(name);
System.out.println(password);
return "suc";
}
请求路径配置说明
- 类上的
@RequestMapping("/user")
定义了基础路径 - 方法上的
@RequestMapping
定义了具体子路径 - 完整访问路径为:基础路径 + 子路径(如
/user/save3
)