news 2026/9/4 4:56:14

Java Web 业务流程 注释

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java Web 业务流程 注释
@RestController @RequestMapping("/api") public class HealthController { @GetMapping("/health") public Map<String, String> health() { return Map.of("status", "ok"); } }

@RestController@RequestMapping@GetMapping都是注解。Spring 看到不同注解,会决定怎么处理这个类或方法。

@RestController

它是在告诉 Spring:

这个类是一个 REST API Controller,请你管理它,并让它能够接收 HTTP 请求。

Spring Boot 启动时扫描到它,就知道这个类是一个Controller,可以用来接收前端发过来的请求。

@RequestMapping("/api")

意思是:

这个 Controller 里面所有接口,统一先加/api

与@GetMapping("/health")拼起来,构成了一个完整的URL:/api/health

@GetMapping("/health")

它告诉 Spring:

当收到一个GET 请求,地址是/health的时候,就执行这个方法。

浏览器 / Vue

GET /api/health

Spring MVC
找到 HealthController

找到 @GetMapping("/health")

执行 health()

返回 Java Map

Spring 自动转 JSON

{
"status": "ok"
}

以上就是现代 Spring Boot Controller 最基本的工作方式。

Spring MVC之所以能够正确匹配Controller,是因为在Spring Boot启动时,会扫描所有的带有@RestController注解的类,并将所有的类提前登记,就好比Spring MVC在启动时建立了一张“路由表”,当请求发过来的时候,会根据URL查询路由表,找到相同URL对应的类并执行。

Vue 前端

GET /api/health

Tomcat 收到 HTTP 请求

DispatcherServlet

Spring MVC 查“路由表”

发现:
GET /api/health
对应
HealthController.health()

执行 health()

返回数据

这里涉及到一个关键的东西,叫做DispatcherServlet,可以把它理解为Spring MVC的总前台,它会根据额Spring启动时登记好的规则,根绝URL分发给不同的Controller。




GET/POST 叫做HTTP方法,URL 决定“找哪个资源”,HTTP 方法决定“要对这个资源干什么”。

比如:

GET /api/students

= 查学生。

POST /api/students

= 新增学生。

PUT /api/students/12

= 修改 12 号学生。

DELETE /api/students/12

= 删除 12 号学生。

前端按钮触发的前端代码决定了HTTP方法的发送。

function createStudent() { axios.post('/api/students', formData) }

发送的时POST请求。




URI 是“资源标识符”的总称,URL 是 URI 的一种,专门用来说明资源在哪里、怎么访问。

URI
├─ URL
└─ 其他类型的标识符

比如:

https://example.com/api/students/12

这是一个 URL,因为它告诉你:

  • 协议:https
  • 主机:example.com
  • 路径:/api/students/12

也就是:

这个资源在哪里,以及怎么访问它。

而像:

/api/students/12

这种在 Spring 代码里经常写的东西,更准确地说是一个URI 路径,它并没有告诉你主机和协议。

真正开发时,URL、URI、path 这几个词经常被人不那么严格地混着说,只要你知道它们严格意义上不是完全一回事即可。




请求映射注解:

最常见的有 5 个:

注解HTTP 方法常见含义举例
@GetMappingGET查询查询学生列表
@PostMappingPOST新增新建学生、提交反馈
@PutMappingPUT整体修改修改学生信息
@PatchMappingPATCH部分修改只修改学生备注
@DeleteMappingDELETE删除删除某条记录

例如学生接口:

@RestController @RequestMapping("/api/students") public class StudentController { @GetMapping public List<Student> list() { ... } @PostMapping public Student create() { ... } @PutMapping("/{id}") public Student update() { ... } @DeleteMapping("/{id}") public void delete() { ... } }

那么对应关系就是:

GET /api/students → 查询学生 POST /api/students → 新增学生 PUT /api/students/12 → 修改 12 号学生 DELETE /api/students/12 → 删除 12 号学生

这里还有一个“老大”:

@RequestMapping

它更通用。

所以可以理解成:

@RequestMapping ↓ 简化出了 @GetMapping @PostMapping @PutMapping @PatchMapping @DeleteMapping

现在 Spring Boot 项目里,一般优先用后面这些,因为更直观。

Spring 组件/Controller 注解

@RestController

是在告诉 Spring:

这个类是一个 Web Controller,而且它的方法返回的数据通常直接作为 HTTP 响应返回。

@Controller和@RestController有什么区别?

传统 Spring MVC:

@Controller public class StudentController { }

@Controller最初主要用于:

返回网页。

比如:

@GetMapping("/students") public String students() { return "students"; }

以前可能表示:去找 student.html 或JSP页面。

这在传统“前后端不分离”的 Java Web 项目里非常常见。

但在前后端分离的项目中,Spring Boot 后端基本不负责生成页面,而是返回JSON数据。

可以粗略的理解为@Controller + @ResponseBody = @RestController

@ResponseBody意思是不要把返回值当作网页名称,直接把返回的数据写进 HTTP 响应。

@Service、@Repository、@Compoent:

这些虽然和@RestController不完全属于同一种功能,但你会经常看到它们一起出现。

例如:

@RestController public class StudentController { }

表示:

Web 接口层。

然后:

@Service public class StudentService { }

表示:

业务逻辑层。

然后:

@Repository public class StudentRepository { }

表示:

数据访问层。

还有一个更通用的:

@Component

表示:

这是一个普通的 Spring 组件,请 Spring 创建和管理它。

可以暂时认为:

@Component ↑ │ ┌──────┼───────────┐ │ │ │ @Service @Repository @Controller

它们本质上都在告诉 Spring:

“这个类你要管起来。”

但是它们表达的职责不同。

一般项目业务逻辑:

例如:

@RestController @RequestMapping("/api/students") public class StudentController { private final StudentService studentService; ... }

然后:

@Service public class StudentService { private final StudentRepository studentRepository; ... }

可以翻译成:

@RestController StudentController 负责接前端请求 ↓ @Service StudentService 负责业务逻辑 ↓ @Repository StudentRepository 负责数据库

整个链路逻辑:

Vue │ │ GET /api/students ↓ @RestController StudentController │ │ @GetMapping ↓ list() │ ↓ @Service StudentService │ ↓ @Repository StudentRepository │ ↓ 数据库

以上就是对于一个项目中出现的注解的认识。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 4:55:14

工业设备故障诊断:电流表显示放电但风泵不工作的排查指南

这次我们来看一个在工业设备维护中非常实用的故障分析案例&#xff1a;充放电电流表显示放电&#xff0c;但风泵打风异常。这个问题的核心不是复杂的理论推导&#xff0c;而是如何通过现场仪表读数、设备状态和系统逻辑&#xff0c;快速定位故障点并给出可执行的解决方案。对于…

作者头像 李华
网站建设 2026/9/4 4:54:00

2026论文降重降AI工具:一次搞定双检

知网、维普相继升级AI生成内容识别功能后&#xff0c;论文查重和AI检测成了毕业季的两道关卡。不少学生重复率达标了&#xff0c;却栽在"疑似AI生成"这一关上。本文盘点几款兼具降重与降AI能力的工具&#xff0c;AIBiye、AICheck、Passbug是当前讨论较多的三款&#…

作者头像 李华
网站建设 2026/9/4 4:50:41

有哪些靠谱的国内学 Python 网站?2026 年实测,这 5 个平台数据说话

国内, 学习渠道繁杂, 免费教程呈碎片化, 付费课程质量高低不一。依据2026年编程学习行业调研数据, 近67%自学的用户, 曾遭遇课程老旧这一问题, 还碰到缺少实操情况, 且答疑无保障。大量初学者花费1至3个月时间, 可依旧没办法独立完成代码项目。结合千万学员真实使用数据、课程更…

作者头像 李华
网站建设 2026/9/4 4:50:32

奖励寻求者模型:AI安全视角下的RLHF目标错位研究

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 4:48:47

Claude Fable 5.1上线OpenRouter:从API调用到Claude Code接入实践

Claude Fable 5.1 上线 OpenRouter&#xff0c;这个标题最值得关心的不是模型名字本身&#xff0c;而是它背后那套调用方式&#xff1a;你不需要单独为它注册一套后台&#xff0c;只要有一个 OpenRouter 的 API Key&#xff0c;就能通过统一接口去请求。对很多做模型对比、工具…

作者头像 李华