快学快用系列:一文学会 Java 后端 Web API 开发(2026 年实用版)
目标读者:有 Java 基础(会写类、接口、集合),想快速上手企业级 RESTful API 开发的同学。
核心技术栈:Spring Boot 3.3.x / 3.4.x(2026 年主流版本) + Maven + Lombok + MyBatis-Plus(可选) + Knife4j / SpringDoc OpenAPI。
全文目标:1–2 小时读完 + 2–4 小时上手敲完第一个完整 CRUD 接口。
一、为什么现在学 Spring Boot 做 Web API 最香?
| 维度 | Spring Boot 3.x(2026) | 传统 SSM / Spring MVC |
|---|---|---|
| 启动速度 | 秒级(devtools + GraalVM Native 支持更好) | 几十秒 |
| 配置量 | 几乎 0 配置(自动配置 + 约定优于配置) | XML + 大量注解 |
| 学习曲线 | 低(一个 @RestController 就能起接口) | 中高 |
| 生态成熟度 | 极高(Spring 官方 + Alibaba + Baomidou 等) | 老项目遗留 |
| 部署方式 | JAR / Docker / Native Image / K8s | WAR / Tomcat |
| 主流公司使用率 | 90%+ 新项目 | 维护老项目 |
一句话:现在不学 Spring Boot 做后端 API,等于在用拨号上网写代码。
二、环境准备(10 分钟搞定)
JDK:JDK 21(LTS)或 JDK 17(企业最稳)
官网下载或 sdkman / asdf / jenv 安装IDE:IntelliJ IDEA Ultimate / Community 2024.x+(强烈推荐)
或 VS Code + Extension Pack for Java构建工具:Maven 3.9.x(主流)或 Gradle 8.x(越来越多人用)
常用插件(IDEA 必装):
- Lombok
- Spring Boot
- Maven Helper
- GitToolBox(可选)
三、最快创建 Spring Boot 项目(官网 / IDEA / 命令行 三选一)
方式一:Spring Initializr(最推荐)
https://start.spring.io/
推荐配置(2026 年最常用组合):
- Project:Maven
- Language:Java
- Spring Boot:3.3.x 或 3.4.x(选最新稳定版)
- Group:com.example
- Artifact:demo-api
- Name:demo-api
- Package name:com.example.demo
- Java:21 或 17
- Dependencies(至少选这几个):
- Spring Web
- Spring Boot DevTools(热部署)
- Lombok
- Spring Boot Actuator(监控)
- Validation(参数校验)
- SpringDoc OpenAPI(推荐,代替 Swagger)
- (可选)MyBatis Plus + MySQL Driver + druid(数据库)
点击 Generate → 解压 → IDEA 打开
方式二:IDEA 一键创建
File → New → Project → Spring Initializr → 同上配置
四、第一个 REST API(Hello World 级)
- 创建 Controller
packagecom.example.demo.controller;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api/v1")publicclassHelloController{@GetMapping("/hello")publicStringhello(){return"Hello, Spring Boot 3 API! (2026)";}@GetMapping("/ping")publicStringping(){return"pong";}}- 启动项目
- IDEA 右上角绿色三角 → Run DemoApiApplication
- 或命令行:
mvn spring-boot:run
- 测试接口
浏览器 / Postman / curl:
http://localhost:8080/api/v1/hello
→ Hello, Spring Boot 3 API! (2026)http://localhost:8080/api/v1/ping
→ pong
五、完整 CRUD 示例(用户管理)
目标:实现用户增删改查 + 分页 + 参数校验 + 统一响应
- 依赖补充(pom.xml)
<!-- 已包含 Spring Web + Lombok + Validation --><!-- 推荐加这些(生产级) --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.6.0</version><!-- 2026 最新稳定 --></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.9</version><!-- 或最新 --></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.23</version></dependency>- 统一响应类(R.java)
packagecom.example.demo.common;importlombok.Data;@DatapublicclassR<T>{privateintcode;privateStringmsg;privateTdata;publicstatic<T>R<T>ok(Tdata){R<T>r=newR<>();r.setCode(200);r.setMsg("success");r.setData(data);returnr;}publicstatic<T>R<T>ok(){returnok(null);}publicstatic<T>R<T>error(intcode,Stringmsg){R<T>r=newR<>();r.setCode(code);r.setMsg(msg);returnr;}}- 实体类(User.java)
packagecom.example.demo.entity;importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.annotation.TableId;importlombok.Data;importjakarta.validation.constraints.NotBlank;importjakarta.validation.constraints.Size;@DatapublicclassUser{@TableId(type=IdType.AUTO)privateLongid;@NotBlank(message="用户名不能为空")@Size(min=3,max=20,message="用户名长度 3-20")privateStringusername;privateStringemail;privateIntegerage;}- Controller(UserController.java)
packagecom.example.demo.controller;importcom.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;importcom.baomidou.mybatisplus.extension.plugins.pagination.Page;importcom.example.demo.common.R;importcom.example.demo.entity.User;importcom.example.demo.service.UserService;importjakarta.validation.Valid;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;@RestController@RequestMapping("/api/v1/users")publicclassUserController{@AutowiredprivateUserServiceuserService;// 新增@PostMappingpublicR<User>create(@RequestBody@ValidUseruser){userService.save(user);returnR.ok(user);}// 修改@PutMapping("/{id}")publicR<User>update(@PathVariableLongid,@RequestBody@ValidUseruser){user.setId(id);userService.updateById(user);returnR.ok(user);}// 删除@DeleteMapping("/{id}")publicR<Void>delete(@PathVariableLongid){userService.removeById(id);returnR.ok();}// 查询单个@GetMapping("/{id}")publicR<User>getById(@PathVariableLongid){returnR.ok(userService.getById(id));}// 分页查询@GetMappingpublicR<Page<User>>page(@RequestParam(defaultValue="1")intpage,@RequestParam(defaultValue="10")intsize,@RequestParam(required=false)Stringusername){Page<User>pageObj=newPage<>(page,size);LambdaQueryWrapper<User>wrapper=newLambdaQueryWrapper<>();wrapper.like(username!=null,User::getUsername,username);wrapper.orderByDesc(User::getId);returnR.ok(userService.page(pageObj,wrapper));}}- Service & Mapper(MyBatis-Plus 风格)
// UserMapper.javapackagecom.example.demo.mapper;importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importcom.example.demo.entity.User;publicinterfaceUserMapperextendsBaseMapper<User>{}// UserService.javapackagecom.example.demo.service;importcom.baomidou.mybatisplus.extension.service.IService;importcom.example.demo.entity.User;publicinterfaceUserServiceextendsIService<User>{}// UserServiceImpl.javapackagecom.example.demo.service.impl;importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;importcom.example.demo.entity.User;importcom.example.demo.mapper.UserMapper;importcom.example.demo.service.UserService;importorg.springframework.stereotype.Service;@ServicepublicclassUserServiceImplextendsServiceImpl<UserMapper,User>implementsUserService{}- application.yml(基础配置)
server:port:8080spring:datasource:url:jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghaiusername:rootpassword:123456driver-class-name:com.mysql.cj.jdbc.Drivertype:com.alibaba.druid.pool.DruidDataSourcemybatis-plus:configuration:map-underscore-to-camel-case:trueglobal-config:db-config:id-type:auto- 访问接口文档(Knife4j / SpringDoc)
启动后浏览器打开:
- http://localhost:8080/swagger-ui.html (SpringDoc 默认)
- 或 http://localhost:8080/doc.html (如果用了 Knife4j)
六、2026 年生产级最佳实践(快速记忆版)
- 统一响应→ 全局 R 或 Result
- 全局异常→ @ControllerAdvice + @ExceptionHandler
- 参数校验→ @Valid + BindingResult 或 @Validated
- 日志→ SLF4J + Logback / Log4j2(结构化 JSON 推荐)
- 接口文档→ SpringDoc OpenAPI 3(取代 Swagger2)
- 安全→ Spring Security + JWT(前后端分离标配)
- 分页→ MyBatis-Plus Page 或 PageHelper
- 跨域→ @CrossOrigin 或 WebMvcConfigurer
- 热部署→ DevTools(开发神器)
- 监控→ Actuator + Micrometer + Prometheus
七、下一阶段速成路线(建议顺序)
- 完成上面 CRUD(2 小时)
- 加全局异常处理 + 统一响应(30 分钟)
- 集成 Knife4j + 接口文档美化(30 分钟)
- 加 JWT 登录认证(1–2 小时)
- 连接真实数据库 + MyBatis-Plus 代码生成器(1 小时)
- Docker 打包 + 部署(30 分钟)
一句话总结:
2026 年最快的 Java Web API 开发路径:Spring Boot 3 + Spring Web + Lombok + MyBatis-Plus + SpringDoc → 30 分钟起接口,2 小时出完整 CRUD。
有任何一步卡住了(比如依赖冲突、MySQL 连不上、校验不生效),直接把报错贴出来,我帮你秒 debug。
现在就去 start.spring.io 创建项目吧!冲~