一、核心定位
Controller = 控制器,属于经典 MVC 架构里的 C(Controller),是整个项目对外的入口层。 简单一句话:接收前端 / 第三方请求,分发处理,返回结果。
二、具体能干什么
1. 接收 HTTP 请求
前端页面、小程序、APP、Postman 发的接口请求(GET/POST/PUT/DELETE),全部先进到 Controller。
接收路径地址:@RequestMapping、@GetMapping 定义接口 URL
接收参数:
路径参数 @PathVariable
请求体 JSON @RequestBody
表单 / 查询参数 @RequestParam
2. 调用业务层 Service
Controller 不写业务逻辑,只做调度: 拿到请求参数 → 校验基础参数 → 调用 Service 层方法处理业务 → 拿到返回数据。
3. 封装并返回响应结果
统一包装成固定格式 JSON 返回给前端,例如:
{ "code": 200, "msg": "操作成功", "data": { ... } }
4. 简单参数校验与请求拦截
对必填参数、参数格式做基础校验;
配合注解实现登录校验、权限判断、接口限流等前置拦截。
三、层级分工(对照整个项目结构)
|
层级 |
职责 |
能不能写业务 |
|
Controller 控制层 |
接请求、调 Service、返回数据 绝对禁止在Controller、Service中直接写SQL,所有数据库操作必须通过Mapper+Mybatis实现。 |
❌ 禁止复杂业务 |
|
Service 业务层 |
核心业务逻辑、流程处理 |
✅ 主要写业务 |
|
Mapper/DAO 数据层 |
操作数据库增删改查 |
❌ 只写 SQL |
|
Entity/Model |
数据库实体类 |
❌ 存字段 |
四、典型目录结构示例(SpringBoot 项目)
前端请求 → Controller(接收请求)→ Service(处理业务)→ Mapper(Mybatis执行SQL) → 数据库
src/main/java/com/xxx/project
├── controller # 所有接口控制器放这里
│ ├── UserController.java
│ ├── OrderController.java
├── service
│ ├── impl # service实现类
├── mapper
├── entity
五、通俗举例
你在浏览器访问 localhost:8080/user/get/1
1、请求先进入 UserController;
2、Controller 拿到用户 id=1;
3、调用 userService.getUserById(1);
4、Service 调用 Mapper 查询数据库;
5、数据一层层回传到 Controller;
6、Controller 打包 JSON 发给浏览器展示。
六、编码规范要点
6.1、Controller 只依赖 Service,绝对不能直接调用 Mapper;
6.2、一个业务模块对应一个 Controller(用户、订单、商品分开);
6.3、不写事务、不写复杂判断,只做请求转发与结果封装。
作用&spm=1001.2101.3001.5002&articleId=163039449&d=1&t=3&u=8eb711c5a6664b89abc8814b24714b14)
1546

被折叠的 条评论
为什么被折叠?



