SpringBootWeb项目案例
以下是该项目的存储路径: D:\develop\Java\web-ai -project\springboot-web-01
项目相关代码解释(剩余解释写在idea项目中的注释里)
lines.stream().map(line -> {
String[] parts = line.split(",");
Integer id = Integer.parseInt(parts[0]);
String username = parts[1];
String password = parts[2];
String name = parts[3];
Integer age = Integer.parseInt(parts[4]);
LocalDateTime updateTime = LocalDateTime.parse(parts[5], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return new User(id, username, password, name, age, updateTime);
}).collect(Collectors.toList());
这行代码是 Java 8+ 的 Stream 流操作,作用非常明确:
核心作用(一句话)
把文件里的每一行字符串 → 转换成 User 对象 → 最终变成一个 List
也就是:文本行 → 自动解析封装成 Java 对象
用最通俗的话讲
- lines 是每行文本的列表
- stream() 开启流水线加工
- map() 就是加工工序:
- 把一行文本切一刀(逗号)
- 取出每个字段
- 转成对应类型
- 塞进 new User()
- collect(toList()):把加工好的 User 打包成列表
最终结果
你会得到:
List< User> userList
里面每个元素都是完整的 User 对象:
整体流程(你整套代码)
- 读取 user.txt 文件
- 按行读取成 List< String>
- 逐行切割 → 解析 → 封装
- 最终得到 List< User>
这就是 Java 读取配置文件 / 数据文件的标准写法!
为什么中间方法用map?
Stream 里的 .map() ≠ 集合 java.util.Map
它们名字一样,但完全不是一个东西!
一个是加工方法,一个是存储数据的集合。
1. 先分清两个完全不同的 “map”
① Stream 中的 .map() —— 方法
作用:把一个东西 转换成 另一个东西
= 类型转换、数据加工
② java.util.Map —— 集合
作用:存储键值对
key - value
2. 为什么这里必须用 .map()?
因为你要做一件事:
把每行字符串 → 变成 User 对象
Stream 提供的方法里:
- .map () = 一对一转换
- .filter () = 过滤
- .flatMap () = 一对多展开
- .sorted () = 排序
你现在的需求是:
每一行字符串 → 变成一个 User
1 对 1 转换 → 必须用 .map()
4. Stream 里根本没有 .set() .list() 这些中间方法!
Stream 中间操作只有这些:
- .map()
- .filter()
- .flatMap()
- .distinct()
- .sorted()
- .limit()
- .skip()
- ...
没有 .set () 没有 .list ()!
你可能混淆了:
结尾的 .collect(Collectors.toList())
这是最终收集成 List 集合
不是中间操作!
5. 一句话总结
- .map () = 转换、加工、映射
- 你要把 String → User,必须用它
- 和 Map 集合没有半毛钱关系
最终极简记忆
.map() = 转换器
进去一个类型 → 出来另一个类型
以下是项目的前后端交互流程图

🔍 流程拆解(对应图里的每一步)
- 前端发请求:你的 Vue 页面加载完成后,mounted 钩子调用 search() 方法,通过 axios.get('/list') 向后端发送异步请求。
- 后端接收请求:Spring Boot 接收到请求,根据 @RequestMapping("/list") 找到对应的 list() 方法。
- 后端读取数据:list() 方法读取 user.txt 文件,解析里面的用户信息。
- 后端封装数据:把解析出来的数据,封装成 List< User> 类型的对象(这一步就是 Lombok 注解帮你生成的无参 / 全参构造器发挥作用的地方)。
- 后端返回数据:Spring Boot 自动把 List
转换成 JSON 格式,通过 HTTP 响应发回给前端。 - 前端渲染数据:Vue 拿到 JSON 数据,赋值给 userList,再通过 v-for 循环渲染到 HTML 表格里,最终你就能看到用户列表了。
💡 补充说明
- http://localhost:8080/list 就是前后端之间的通信地址,是这整个流程的 “入口”。
- 前端的 axios.get('/list') 和后端的 @RequestMapping("/list") 必须完全对应,请求才能正确匹配到对应的后端方法。
http://localhost:8080/list 到底是什么、属于哪里的知识?
http://localhost:8080/list = 后端接口地址
属于 Spring Boot + Spring MVC 知识
作用:前后端通行的 “地址”
1. localhost:8080
- localhost:你自己的电脑
- 8080:Spring Boot 启动的端口号
→ 这是 Spring Boot 项目运行的地址
2. /list
这是你在 Java 里写的:
@RequestMapping("/list")
→ 这是 Spring MVC 的接口路径
3. 合在一起
http://localhost:8080/list
就是:
访问你本机 8080 端口上的 /list 接口
这个接口由 Java 后端提供
它属于哪一块知识?(精准定位)
属于:
Spring Boot Web 开发 → 接口(API)开发
更细一点:
- Spring MVC(请求映射)
- RESTful API(接口地址)
- 前后端交互
前端为什么能访问它?
因为:
前端
axios.get("http://localhost:8080/list")
↓
找到
@RequestMapping("/list")
↓
执行后端 Java 方法
↓
返回 JSON 数据
↓
表格显示数据
浙公网安备 33010602011771号