ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Java Web 业务流程 注释

Java Web 业务流程 注释 RestController RequestMapping(/api) public class HealthController { GetMapping(/health) public MapString, 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/healthGetMapping(/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 ListStudent 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 MVCController public class StudentController { }Controller最初主要用于返回网页。比如GetMapping(/students) public String students() { return students; }以前可能表示去找 student.html 或JSP页面。这在传统“前后端不分离”的 Java Web 项目里非常常见。但在前后端分离的项目中Spring Boot 后端基本不负责生成页面而是返回JSON数据。可以粗略的理解为Controller ResponseBody RestControllerResponseBody意思是不要把返回值当作网页名称直接把返回的数据写进 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 │ ↓ 数据库以上就是对于一个项目中出现的注解的认识。
返回列表