【后端】【Java】一文深入理解 Spring Boot RESTful 风格接口开发

深入理解 Spring Boot RESTful 风格接口开发

一、什么是 RESTful?

RESTful 是一种基于 REST(Representational State Transfer,表述性状态转移) 架构风格的 Web 接口设计规范。

在 RESTful 风格中:

  • 一切皆资源

  • 通过 URL 表示资源

  • 通过 HTTP 方法描述对资源的操作

  • 使用统一的数据格式进行交互(通常是 JSON)

Spring Boot 天生适合用于构建 RESTful 风格接口,因此在现代 Java Web 开发中被广泛采用。


二、RESTful 的核心设计思想

1️⃣ 资源导向(Resource-Oriented)

RESTful 强调"资源"而不是"动作"。

❌ 不推荐:

复制代码
/getUserById?id=1
/deleteUser?id=1

✅ 推荐:

复制代码
/users/1

资源通常使用 名词复数 表示:

  • /users

  • /orders

  • /products


2️⃣ 使用 HTTP 方法表示行为

HTTP 方法 含义 示例
GET 查询资源 GET /users/1
POST 创建资源 POST /users
PUT 更新资源(整体) PUT /users/1
PATCH 更新资源(部分) PATCH /users/1
DELETE 删除资源 DELETE /users/1

URL 不变,行为由 HTTP 方法决定,这是 RESTful 的核心思想之一。


3️⃣ 无状态(Stateless)

RESTful 接口要求:

  • 服务端 不保存客户端状态

  • 每次请求都包含完整信息(参数、Token 等)

这使得系统:

  • 更易扩展

  • 更适合分布式和微服务架构


4️⃣ 统一数据格式

目前最常见的数据交互格式是 JSON,相比 XML:

  • 更轻量

  • 可读性更好

  • 前后端支持更友好


三、Spring Boot 对 RESTful 的天然支持

Spring Boot 基于 Spring MVC,提供了大量用于 REST 开发的注解,极大降低了开发成本。


四、Spring Boot RESTful 常用注解详解

1️⃣ @RestController

复制代码
@RestController
public class UserController {
}

等价于:

复制代码
@Controller
@ResponseBody

👉 表示该类中所有方法返回的都是 JSON 数据,而不是视图页面。


2️⃣ 请求映射相关注解

@RequestMapping

通用映射注解:

复制代码
@RequestMapping(value = "/users", method = RequestMethod.GET)
推荐使用语义更清晰的派生注解:
复制代码
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

示例:

复制代码
@GetMapping("/users")
public List<User> listUsers() {
    return userService.findAll();
}

3️⃣ @PathVariable(路径参数)

复制代码
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
    return userService.findById(id);
}

URL 示例:

复制代码
GET /users/1

👉 RESTful 强烈推荐使用路径参数来定位资源


4️⃣ @RequestParam(查询参数)

复制代码
@GetMapping("/users")
public List<User> queryUsers(@RequestParam String name) {
    return userService.findByName(name);
}

URL 示例:

复制代码
GET /users?name=Tom

5️⃣ @RequestBody(请求体)

用于接收 JSON 数据:

复制代码
@PostMapping("/users")
public User createUser(@RequestBody User user) {
    return userService.save(user);
}

前端请求体示例:

复制代码
{
  "name": "Tom",
  "age": 20
}

五、RESTful 接口完整示例

1️⃣ 实体类

复制代码
public class User {
    private Long id;
    private String name;
    private Integer age;

    // getter & setter
}

2️⃣ Controller 示例

复制代码
@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return new User(id, "Tom", 20);
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return user;
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id,
                           @RequestBody User user) {
        user.setId(id);
        return user;
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        // 删除逻辑
    }
}

六、JSON 序列化与反序列化原理

Spring Boot 默认使用 Jackson 进行 JSON 处理。

✔ 序列化

Java 对象 → JSON

✔ 反序列化

JSON → Java 对象

开发者通常无需手动处理 ,Spring Boot 会通过 HttpMessageConverter 自动完成。


七、常用 Jackson 注解

1️⃣ @JsonIgnore

复制代码
@JsonIgnore
private String password;

👉 返回 JSON 时忽略该字段


2️⃣ @JsonProperty

复制代码
@JsonProperty("user_name")
private String name;

👉 自定义 JSON 字段名


3️⃣ @JsonFormat

复制代码
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;

👉 常用于时间字段格式化


八、RESTful 接口设计最佳实践

✅ URL 使用名词复数

✅ 不在 URL 中出现动词

✅ 正确使用 HTTP 状态码

✅ 统一返回结构

✅ 接口版本控制(如 /api/v1/users

示例返回结构:

复制代码
{
  "code": 200,
  "message": "success",
  "data": {}
}

九、总结

Spring Boot 提供了极其完善的 RESTful 开发支持,使得:

  • 接口定义简洁清晰

  • JSON 处理高度自动化

  • 易于前后端分离

  • 适合微服务架构

掌握 RESTful 风格,不仅是学会几个注解,更重要的是 理解资源导向和统一接口设计思想


相关推荐
Jul1en_4 小时前
【Spring】实现验证码功能
java·后端·spring
〝七夜5694 小时前
Jsp中动态include和静态include的区别
java·开发语言
努力进修4 小时前
【JavaEE初阶】告别小白!Java IO 流读写 + 文件操作实战
java·开发语言·java-ee
爬山算法4 小时前
Netty(7)如何实现基于Netty的TCP客户端和服务器?
java·服务器·tcp/ip
全栈独立开发者4 小时前
软考架构师实战:Spring Boot 3.5 + DeepSeek 开发 AI 应用,上线 24 小时数据复盘(2C1G 服务器抗压实录)
java·spring boot·后端
CoderYanger4 小时前
D.二分查找-基础-2529. 正整数和负整数的最大计数
java·开发语言·数据结构·算法·leetcode·职场和发展
小光学长4 小时前
ssm农民养殖经验交流与分享平台bc046578(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·spring
E***U9454 小时前
Java 校招 / 社招:Spring Boot 项目实战指南
java·开发语言·spring boot
在坚持一下我可没意见5 小时前
Spring 开发小白学习过程中常用通用配置文件,即拿即用!(持续更新中)
java·数据库·后端·学习·spring·tomcat·mybatis