快学快用系列:一文学会 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
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/v1")
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot 3 API! (2026)";
}
@GetMapping("/ping")
public String ping() {
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)
package com.example.demo.common;
import lombok.Data;
@Data
public class R<T> {
private int code;
private String msg;
private T data;
public static <T> R<T> ok(T data) {
R<T> r = new R<>();
r.setCode(200);
r.setMsg("success");
r.setData(data);
return r;
}
public static <T> R<T> ok() {
return ok(null);
}
public static <T> R<T> error(int code, String msg) {
R<T> r = new R<>();
r.setCode(code);
r.setMsg(msg);
return r;
}
}
- 实体类(User.java)
package com.example.demo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
@Data
public class User {
@TableId(type = IdType.AUTO)
private Long id;
@NotBlank(message = "用户名不能为空")
@Size(min = 3, max = 20, message = "用户名长度 3-20")
private String username;
private String email;
private Integer age;
}
- Controller(UserController.java)
package com.example.demo.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.common.R;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@Autowired
private UserService userService;
// 新增
@PostMapping
public R<User> create(@RequestBody @Valid User user) {
userService.save(user);
return R.ok(user);
}
// 修改
@PutMapping("/{id}")
public R<User> update(@PathVariable Long id, @RequestBody @Valid User user) {
user.setId(id);
userService.updateById(user);
return R.ok(user);
}
// 删除
@DeleteMapping("/{id}")
public R<Void> delete(@PathVariable Long id) {
userService.removeById(id);
return R.ok();
}
// 查询单个
@GetMapping("/{id}")
public R<User> getById(@PathVariable Long id) {
return R.ok(userService.getById(id));
}
// 分页查询
@GetMapping
public R<Page<User>> page(
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size,
@RequestParam(required = false) String username) {
Page<User> pageObj = new Page<>(page, size);
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(username != null, User::getUsername, username);
wrapper.orderByDesc(User::getId);
return R.ok(userService.page(pageObj, wrapper));
}
}
- Service & Mapper(MyBatis-Plus 风格)
// UserMapper.java
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
public interface UserMapper extends BaseMapper<User> {
}
// UserService.java
package com.example.demo.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.entity.User;
public interface UserService extends IService<User> {
}
// UserServiceImpl.java
package com.example.demo.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
- application.yml(基础配置)
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
global-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 创建项目吧!冲~