Spring-MVC

在学习 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
相关推荐
JAVA面经实录9174 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
许彰午6 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
Bat U7 小时前
JavaEE|多线程初阶(七)
java·开发语言
掌心向暖RPA自动化10 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
日取其半万世不竭10 小时前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
TeamDev11 小时前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
AI人工智能+电脑小能手12 小时前
【大白话说Java面试题】【Java基础篇】第25题:JDK1.8的新特性有哪些
java·开发语言·后端·面试
likerhood12 小时前
SLF4J: Failed to load class “StaticLoggerBinder“ 解决
java·log4j·maven
早日退休!!!12 小时前
大模型推理瓶颈七层分析模型
java·服务器·数据库