Sprint 1-2:创建第一个 Spring Boot Module(user-service) 一、内容包括创建 Maven Module引入 spring-boot-starter-web创建启动类启动 Spring Boot写第一个 Controller理解 IoC 容器一、为什么必须先做 user-serviceminishop-user└── src/main/java└── com/minishop/user├── controller├── service├── mapper├── domain└── UserApplication.javauser- service——用户服务登录、注册、用户信息企业微服务的顺序通常是用户系统User→ 商品系统Product→ 订单系统Order→ 支付系统Payment1.1 构建UserApplication.java在src/main/java中New → Package输入com.minishop.user在此package中创建UserApplication.java。完整路径minishop-user/src/main/java/com/minishop/user/UserApplication.java1、User的pom.xml需要添加 Spring Boot Web依赖。dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency /dependencies2、UserApplication.javapackage com.minishop.user; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class UserApplication { public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); } }二、Sprint 1-3企业级分层架构Controller / Service / Mapper二、标准三层架构在minishop-user中我们定义Controller → Service → Mapper1Controller接口层职责接收 HTTP 请求参数校验简单返回结果不写业务逻辑 ❌2Service业务层职责核心业务逻辑事务控制调用多个 Mapper / Redis / Kafka3Mapper数据层职责只负责数据库操作MyBatis SQL不写业务逻辑1.1 构建user第一个接口构建 controller 软件包/Java_work/minishop/minishop-user/src/main/java/com/minishop/user/controller创建UserController.java✅GetMapping≈ FastAPI 的app.get(/path)——把 HTTP GET 请求映射到某个 Java 方法✅RestController≈ FastAPI 的 APIRouter JSON Response 模式Controller ResponseBody 的合体Controller ResponseBody这个类里的所有方法返回值都会直接写入 HTTP Response Bodypackage com.minishop.user.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; RestController public class UserController { GetMapping(/user/hello) public String hello() { return hello minishop user service; } } /**同等于python如下写法 from fastapi import FastAPI app FastAPI() app.get(/user/hello) def hello(): return {msg: hello} */注解对应 HTTPGetMappingGETPostMappingPOSTPutMappingPUTDeleteMappingDELETE1.1.1 规范返回1.1中的输出是String但是我们一般需要采用Json进行规范输出。{ code: 0, message: success, data: {} }Step 1创建包minishop-common └── src/main/java/com/minishop/common 创建com.minishop.common.resultStep 2创建 Result.javaSerializable——标记接口Marker Interface告诉 JVM这个类的对象可以被“序列化把Java对象从内存对象--让该对象跨进程传输能力转为字节流byte[ ]用于网络传输、redis存储、Kafka消息、文件持久化class ResultT——泛型结构private T data的类型由调用者决定。static——不需要new 对象就可以直接调用。static T 就是泛型方法调用时自动推导类型。private——定义后的对象仅内部访问外部无法更改例成功的code就一定是0DTO private getter/setter。public Result——方法重载overload当无输出Result时JSON中需要返回null即采用无参Result有输出就采用有参Result。也可以不写空的Result但这样controller处就必须package com.minishop.common.result; import java.io.Serializable; public class ResultT implements Serializable { private Integer code; private String message; private T data; public Result() {} public Result(Integer code, String message, T data) { this.code code; this.message message; this.data data; } // 成功 public static T ResultT success(T data) { return new Result(0, success, data); } public static T ResultT success() { return new Result(0, success, null); } // 失败 public static T ResultT fail(Integer code, String message) { return new Result(code, message, null); } public Integer getCode() { return code; } public String getMessage() { return message; } public T getData() { return data; } public void setCode(Integer code) { this.code code; } public void setMessage(String message) { this.message message; } public void setData(T data) { this.data data; } }S3、在 user-service 中使用——在Controller中实现Result接口package com.minishop.user.controller; import com.minishop.common.result.Result; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; RestController public class UserController { GetMapping(/user/hello) public ResultString hello() { return Result.success(hello minishop user); } }S4、添加common依赖在user的pom.xml中的依赖项中添加common依赖dependencies dependency groupIdcom.minishop/groupId artifactIdminishop-common/artifactId version1.0.0-SNAPSHOT/version /dependency /dependencies测试http://localhost:8080/user/hello返回即JSONSpring MVC 核心执行链路前端Tomcat【接单】内嵌服务器接收 HTTP → 封装 HttpServletRequest然后交给DispatcherServletDispatcherServlet【总调度】本质Servlet接受请求并分发HandlerMapping【找人】找控制器HandlerAdapter【执行】执行方法的“适配器”Controller【业务】ReturnValueHandler【包装】返回值处理器判断返回值是对象 → 需要转换 JSONHttpMessageConverter【输出控制】JSON转换器写回 HTTP Response【响应】写入 response body → 返回前端