快学快用系列:一文学会java后端WebApi开发

快学快用系列:一文学会 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 / K8sWAR / Tomcat
主流公司使用率90%+ 新项目维护老项目

一句话:现在不学 Spring Boot 做后端 API,等于在用拨号上网写代码

二、环境准备(10 分钟搞定)

  1. JDK:JDK 21(LTS)或 JDK 17(企业最稳)
    官网下载或 sdkman / asdf / jenv 安装
  2. IDE:IntelliJ IDEA Ultimate / Community 2024.x+(强烈推荐)
    或 VS Code + Extension Pack for Java
  3. 构建工具:Maven 3.9.x(主流)或 Gradle 8.x(越来越多人用)
  4. 常用插件(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 级)

  1. 创建 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";
    }
}
  1. 启动项目
  • IDEA 右上角绿色三角 → Run DemoApiApplication
  • 或命令行:mvn spring-boot:run
  1. 测试接口

浏览器 / Postman / curl:

  • http://localhost:8080/api/v1/hello
    → Hello, Spring Boot 3 API! (2026)
  • http://localhost:8080/api/v1/ping
    → pong

五、完整 CRUD 示例(用户管理)

目标:实现用户增删改查 + 分页 + 参数校验 + 统一响应

  1. 依赖补充(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>
  1. 统一响应类(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;
    }
}
  1. 实体类(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;
}
  1. 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));
    }
}
  1. 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 {
}
  1. 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
  1. 访问接口文档(Knife4j / SpringDoc)

启动后浏览器打开:

  • http://localhost:8080/swagger-ui.html (SpringDoc 默认)
  • 或 http://localhost:8080/doc.html (如果用了 Knife4j)

六、2026 年生产级最佳实践(快速记忆版)

  1. 统一响应 → 全局 R 或 Result
  2. 全局异常 → @ControllerAdvice + @ExceptionHandler
  3. 参数校验 → @Valid + BindingResult 或 @Validated
  4. 日志 → SLF4J + Logback / Log4j2(结构化 JSON 推荐)
  5. 接口文档 → SpringDoc OpenAPI 3(取代 Swagger2)
  6. 安全 → Spring Security + JWT(前后端分离标配)
  7. 分页 → MyBatis-Plus Page 或 PageHelper
  8. 跨域 → @CrossOrigin 或 WebMvcConfigurer
  9. 热部署 → DevTools(开发神器)
  10. 监控 → Actuator + Micrometer + Prometheus

七、下一阶段速成路线(建议顺序)

  1. 完成上面 CRUD(2 小时)
  2. 加全局异常处理 + 统一响应(30 分钟)
  3. 集成 Knife4j + 接口文档美化(30 分钟)
  4. 加 JWT 登录认证(1–2 小时)
  5. 连接真实数据库 + MyBatis-Plus 代码生成器(1 小时)
  6. Docker 打包 + 部署(30 分钟)

一句话总结

2026 年最快的 Java Web API 开发路径:Spring Boot 3 + Spring Web + Lombok + MyBatis-Plus + SpringDoc → 30 分钟起接口,2 小时出完整 CRUD

有任何一步卡住了(比如依赖冲突、MySQL 连不上、校验不生效),直接把报错贴出来,我帮你秒 debug。

现在就去 start.spring.io 创建项目吧!冲~

文章已创建 3996

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部