🎯 我的 Spring Boot 控制器看起来没问题… 直到我理解了表示层
Source: Dev.to
🧠 什么是表现层(通俗解释)?
表现层是你的 Spring Boot 应用的入口点。它负责:
- 接收来自客户端的 HTTP 请求
- 将请求映射到正确的端点
- 接受并转换输入数据
- 以 JSON/XML 形式返回响应
它 不应包含业务逻辑。
它 不应直接与数据库交互。
它的工作很简单:
处理请求 → 委派工作 → 返回响应
🏗️ 大局观:Spring Boot 项目结构
一个干净的 Spring Boot Web 应用通常是这样的:
client
controller
service
dto
repository
entity
database
关键规则:
👉 控制器只与服务交互,而不直接操作数据库。
遵循这点后,我的代码一夜之间变得更整洁。
🎮 控制器:表现层的核心
Spring MVC 为我们提供了基于注解的编程模型来构建控制器。
重要注解
@Controller– 用于传统的 MVC 应用,返回视图。@RestController–@Controller + @ResponseBody的快捷写法。@RestController中的每个方法直接向客户端返回 JSON/XML。对于 REST API,默认使用@RestController。
🔗 请求映射:如何让请求找到你的代码
Spring 需要知道哪个 URL 映射到哪个方法。这就靠请求映射来实现。
@RequestMapping
一种通用映射,支持:
- URL 路径
- HTTP 方法
- 请求头
- 媒体类型
在实际项目中我们更常使用它的更简洁的变体。
🚦 HTTP 方法专用映射(推荐使用)
Spring 提供了快捷注解,使 API 更易读:
@GetMapping→ 获取数据@PostMapping→ 创建数据@PutMapping→ 更新数据@DeleteMapping→ 删除数据@PatchMapping→ 部分更新
正确使用这些注解可以让 API 自解释。
🌍 动态 URL:@PathVariable 与 @RequestParam 的区别
@PathVariable
/employees/123
当值必须且唯一标识资源时使用。
@RequestParam
/employees?id=123
当参数可选时使用,例如过滤、排序、分页。
理解这一区别能立刻提升 API 设计质量。
📦 使用 @RequestBody 处理输入数据
当客户端发送数据(JSON/XML)时,Spring 通过 @RequestBody 将其转换为 Java 对象。常用于:
- POST
- PUT
- PATCH
Spring 的消息转换器(如 Jackson)会自动把 JSON 转换为 Java 对象。
⚠️ 我曾犯的错误
我过去:
- 在控制器里写业务逻辑
- 手动验证数据
- 直接调用仓库(Repository)
这破坏了关注点分离。表现层不负责业务逻辑。遵守这一边界后,API 变得:
- 更简洁
- 更易测试
- 更易维护
🚀 最后感想
表现层看似简单,却决定了后端代码的整洁程度。
如果控制器保持干净:
- 服务层发挥光彩
- Bug 更少
- 扩展更容易
对我而言,理解这一层是 Spring Boot 学习之路的转折点。
本文是我在探索 Spring Boot 与后端开发过程中,进行的公开学习的一部分。