一、Spring MVC 综合案例
Spring MVC 在实际开发中非常常见,下面通过几个典型场景,从接口定义到前后端联调,完整走一遍流程。先看一个最简单的加法计算器,再慢慢过渡到用户登录和留言板,逐步加深理解。
1. 案例一:加法计算器
接口定义
- 功能:两数相加。
- 路径:
calc/sum - 参数:
| 参数名称 | 类型 | 是否必须 |
|---|---|---|
| num1 | Integer | 是 |
| num2 | Integer | 是 |
响应数据:
- contentType:
text/html - 响应内容:计算结果:ans
代码实现
先看前端静态页面 calc.html:
加法计算器
简易计算器
访问地址:http://127.0.0.1:8080/calc.html
后端接口实现:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/calc")
public class CalcController {
@RequestMapping("/sum")
public String sum(Integer num1, Integer num2){
Integer total = num1 + num2;
return "计算结果:" + total + "
";
}
}
2. 案例二:用户登录系统
接口定义
1. 检验用户信息
- 功能:检验账号密码是否正确。
- 路径:
/user/login - 请求方式:POST
- 参数:
| 参数名称 | 类型 | 是否必须 |
|---|---|---|
| username | String | 是 |
| password | String | 是 |
响应数据:
- contentType:
text/html - 响应内容:
true//验证成功false//验证失败
2. 查询登录用户
- 功能:查询当前登录的用户
- 请求路径:
/user/getLoginUser - 请求方式:GET
- 请求参数:无
响应数据:
- contentType:
text/html - 响应内容:admin
后端
import jakarta.servlet.http.HttpSession;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class LoginController {
// 登录校验接口
@RequestMapping("/login")
public boolean login(String userName, String password, HttpSession session){
// 判断账号密码是否为空
if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){
return false;
}
// 模拟数据库账号密码
if("zhangsan".equals(userName) && "123456".equals(password)){
// 登录成功,存入session
session.setAttribute("loginUser", userName);
return true;
}
return false;
}
// 获取当前登录用户
@RequestMapping("/getLoginUser")
public String getLoginUser(HttpSession session){
// getSession(false):无会话不创建新session
String user = (String) session.getAttribute("loginUser");
return user == null ? "" : user;
}
}
注意:
- 代码要尽量减少嵌套,增加可读性
- 判断两个字符串是否相等的时候要把常量写在前面,变量写在
equal()里,防止空指针异常:"admin".equals(username)
前端
采用 AJAX 实现异步请求,在不重新加载整个页面的情况下与服务器交换数据。
login.html
用户登录
用户名: 密码:
index.html
登录人:
3. 案例三:留言板
Lombok
先引入 Lombok 依赖,它能在编译期自动生成 getter、setter、toString 等方法,大大减少样板代码:
org.projectlombok lombok true
常用注解及作用:
| 注解 | 作用 |
|---|---|
| @Data | 综合注解:自动生成getter、setter、toString、equals、hashCode、无参构造 |
| @Getter/@Setter | 单独生成get/set方法 |
| @NoArgsConstructor | 无参构造方法 |
| @AllArgsConstructor | 全参构造方法 |
| @NonNull | 属性非空校验 |
注意:
@Data=@Getter+@Setter+toString()+equals()+hashCode()@Data生成的内容非常多,如果只需要部分方法,可以用更具体的注解@Getter/@Setter既是类注解也是属性注解:放在类上对所有属性生效,放在属性上只对该属性生效

接口设计
1. 获取全部留言
- 请求方式:GET
- 请求路径:
/message/getList - 响应数据:
Content-Type: application/json- 类型:JSON
2. 发送留言
- 请求方式:POST
- 请求路径:
/message/publish - 响应数据:JSON格式
- 响应内容:
ok:0//发布失败ok:1//发布成功
- 响应内容:
总结
从加法计算器到用户登录,再到留言板,这三个案例覆盖了 Spring MVC 开发中最常见的场景:参数接收、表单提交、Session 管理、AJAX 交互、JSON 响应以及 Lombok 工具的使用。理解这些基础模式后,很多复杂业务都可以在此基础上扩展。