本文目录导读:

- 经典入门案例:Spring Boot + Spring Web + 内存存储
- 企业级标准案例:Spring Boot + JPA/Hibernate + MySQL/PostgreSQL
- 安全与认证案例:Spring Security + JWT (JSON Web Token)
- 文档与调测案例:SpringDoc OpenAPI (Swagger 3)
- 异常处理与统一响应案例:全局异常处理 + 自定义响应格式
- 性能与异步案例:Spring WebFlux + R2DBC (响应式编程)
- 推荐学习路线
Spring Boot + Spring Web + 内存存储
适用场景:新手入门、快速原型、学习REST基础概念(HTTP方法、状态码、JSON序列化)。
- 核心代码:
@RestController定义资源端点。@GetMapping、@PostMapping、@PutMapping、@DeleteMapping映射HTTP方法。- 使用
ConcurrentHashMap或ArrayList作为临时数据存储。
- 案例示例:图书馆图书管理API
GET /api/books:获取所有图书。POST /api/books:添加一本新书(请求体包含JSON:{"title": "xxx", "author": "yyy"})。GET /api/books/{id}:获取单本图书详情。PUT /api/books/{id}:更新指定图书信息。DELETE /api/books/{id}:删除指定图书。
- 关键点:演示完整的CRUD(增删改查)操作,以及如何用
ResponseEntity返回合适的HTTP状态码(如201 Created, 404 Not Found)。
企业级标准案例:Spring Boot + JPA/Hibernate + MySQL/PostgreSQL
适用场景:实际项目开发,需要持久化数据、数据库事务、复杂查询。
- 改进点:
- 引入
@Entity定义数据模型,@Repository接口继承JpaRepository。 - 使用
@Service层处理业务逻辑,实现 控制层(Controller)、服务层(Service)、数据访问层(Repository) 三层架构。 - 使用
@Valid和@NotBlank等注解进行参数校验(Bean Validation)。
- 引入
- 案例示例:用户订单管理系统
- 定义
User、Order、Product实体及关联关系(@OneToMany,@ManyToOne)。 POST /api/orders创建订单时,服务层会自动检查用户是否存在、库存是否充足等。- 利用JPA的
Pageable实现分页查询:GET /api/users?page=0&size=10&sort=createdAt,desc。
- 定义
- 关键点:学会避免N+1查询问题(使用
@EntityGraph或FetchType.LAZY)、处理级联操作、使用DTO(数据传输对象)避免暴露实体内部结构。
安全与认证案例:Spring Security + JWT (JSON Web Token)
适用场景:需要保护API接口,实现用户登录/注册、角色权限控制(如管理员、普通用户)。
- 核心实现:
- 使用Spring Security配置安全过滤链。
- 实现
UserDetailsService加载用户信息。 - 编写JWT工具类(生成Token、验证Token)。
- 自定义
OncePerRequestFilter拦截请求,从Header中提取BearerToken并验证。
- 案例示例:博客平台API
POST /api/auth/login:返回JWT Token。- 受保护的资源:
POST /api/posts(仅登录用户可创建)、DELETE /api/posts/{id}(仅作者或管理员可删除)。 - 角色控制:
@PreAuthorize("hasRole('ADMIN')")限制管理员才能访问的接口。
- 关键点:理解无状态认证(Sessionless)、Token刷新机制、密码加密(BCryptPasswordEncoder)、CSRF防护(在REST API中通常禁用CSRF)。
文档与调测案例:SpringDoc OpenAPI (Swagger 3)
适用场景:生成清晰的API文档,方便前后端联调及团队协作。
- 改进点:
- 在
pom.xml中添加springdoc-openapi-starter-webmvc-ui依赖。 - 使用
@Operation、@ApiResponse、@Schema等注解为API添加描述。
- 在
- 案例示例:现有API接口的文档化
- 启动项目后访问
http://localhost:8080/swagger-ui/index.html。 - 可在线测试
POST请求,如注册用户、创建订单。 - 自动生成客户端SDK。
- 启动项目后访问
- 关键点:学会定义全局参数(如JWT Header)、分组文档(如按版本
v1、v2分组)、隐藏内部接口(@Hidden)。
异常处理与统一响应案例:全局异常处理 + 自定义响应格式
适用场景:规范所有API的返回格式,避免到处写try-catch,提升代码可维护性。
- 核心实现:
- 自定义统一响应类
ApiResult<T>:包含code(业务码)、message、data、timestamp。 - 使用
@RestControllerAdvice+@ExceptionHandler捕获各类异常(如MethodArgumentNotValidException、ConstraintViolationException、自定义业务异常BusinessException)。
- 自定义统一响应类
- 案例示例:对上述所有案例进行改造
- 当查询ID不存在时,不直接返回500,而是返回
ApiResult.error(404, "用户不存在")。 - 参数校验失败时,统一收集错误信息返回给前端。
- 当查询ID不存在时,不直接返回500,而是返回
- 关键点:区分HTTP状态码(如400 Bad Request)和业务错误码(如 10001=库存不足),后者对前端更友好。
性能与异步案例:Spring WebFlux + R2DBC (响应式编程)
适用场景:高并发、I/O密集型应用(如网关、实时数据推送),需要充分利用服务器资源。
- 技术栈:抛弃传统的Servlet(Tomcat),改用Netty,使用
Mono和Flux处理异步数据流。 - 案例示例:实时股票行情推送API
GET /api/stocks/prices:返回Flux<StockPrice>,服务端持续推送数据(Server-Sent Events,SSE)。- 非阻塞数据库查询:使用R2DBC(Reactive Relational Database Connectivity)连接PostgreSQL,避免连接池线程阻塞。
- 关键点:学习背压(Backpressure)机制、Reactive Streams规范、与传统的
@Transactional兼容问题(需使用Reactive事务管理器)。
推荐学习路线
- 初学:案例1(Spring Boot + 内存),理解REST基础,能做通CRUD。
- 进步:案例2(+ 数据库) + 案例5(异常处理),学会分层设计和规范输出,应对大部分业务需求。
- 实战:案例3(+ 安全) + 案例4(+ 文档),完成一个可交付生产环境的API项目。
- 进阶:案例6(WebFlux),挑战高并发、低延迟场景。
这些案例从简单到复杂,覆盖了REST API开发中的核心痛点(数据持久化、认证安全、文档、异常、性能),建议你可以从案例1和案例2开始动手编码实践。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播