前言
SpringBoot 是目前 Java 生态系统中最流行的微服务开发框架。它通过自动配置和起步依赖大幅简化了 Spring 应用的搭建和开发过程。本文将通过一个实际的用户管理微服务示例,带你快速掌握 SpringBoot 的核心开发流程。
1. 项目初始化
使用 Spring Initializr 创建项目,选择以下依赖:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies>
|
2. 设计 RESTful API
遵循 RESTful 设计原则,用户管理模块的 API 设计如下:
| 方法 |
路径 |
说明 |
| GET |
/api/users |
获取用户列表 |
| GET |
/api/users/{id} |
获取单个用户 |
| POST |
/api/users |
创建用户 |
| PUT |
/api/users/{id} |
更新用户 |
| DELETE |
/api/users/{id} |
删除用户 |
3. 数据模型与持久化
定义 User 实体类,使用 JPA 注解完成对象关系映射:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| @Entity @Table(name = "users") @Data @NoArgsConstructor @AllArgsConstructor public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
@Column(nullable = false, length = 50) @NotBlank(message = "用户名不能为空") private String username;
@Column(nullable = false, unique = true) @Email(message = "邮箱格式不正确") private String email;
@Column(name = "created_at") private LocalDateTime createdAt;
@PrePersist protected void onCreate() { createdAt = LocalDateTime.now(); } }
|
4. 统一响应格式
定义统一的 API 响应结构,避免每个接口返回格式不一致:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @Data @AllArgsConstructor public class ApiResponse<T> { private int code; private String message; private T data;
public static <T> ApiResponse<T> success(T data) { return new ApiResponse<>(200, "success", data); }
public static <T> ApiResponse<T> error(int code, String message) { return new ApiResponse<>(code, message, null); } }
|
5. 全局异常处理
使用 @ControllerAdvice 实现统一的异常处理,让代码更简洁:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @RestControllerAdvice public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) public ApiResponse<Void> handleNotFound(ResourceNotFoundException ex) { return ApiResponse.error(404, ex.getMessage()); }
@ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ApiResponse<Void> handleValidation(MethodArgumentNotValidException ex) { String message = ex.getBindingResult().getFieldErrors() .stream() .map(FieldError::getDefaultMessage) .collect(Collectors.joining(", ")); return ApiResponse.error(400, message); } }
|
6. 单元测试
SpringBoot 提供了完善的测试支持,使用 @WebMvcTest 测试 Controller 层:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @WebMvcTest(UserController.class) class UserControllerTest {
@Autowired private MockMvc mockMvc;
@MockBean private UserService userService;
@Test void shouldReturnUserList() throws Exception { when(userService.findAll()).thenReturn(List.of(new User(1L, "test", "test@example.com", null)));
mockMvc.perform(get("/api/users")) .andExpect(status().isOk()) .andExpect(jsonPath("$.code").value(200)) .andExpect(jsonPath("$.data[0].username").value("test")); } }
|
总结
通过本文的实践,我们完成了一个 SpringBoot 微服务的基础搭建,涵盖了项目初始化、API 设计、数据持久化、异常处理和测试等关键环节。这些都是实际开发中必不可少的基础设施,掌握之后可以快速投入到业务开发中。
8年Java后端开发老兵,专注微服务、容器化、分布式架构。