🎯 我的 Spring Boot 控制器看起来没问题… 直到我理解了表示层

发布: (2026年1月3日 GMT+8 18:46)
4 min read
原文: Dev.to

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 与后端开发过程中,进行的公开学习的一部分。

Back to Blog

相关文章

阅读更多 »

让我们分离分离

简介 在2025年最后几天,我们的团队负责人额外请了一天假,错过了一个重要会议。最近的重组后,一位同事离职……