Spring Boot的RESTful API开发?

举报
bug菌 发表于 2025/04/27 09:52:43 2025/04/27
【摘要】 🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

在这篇文章中,我们将深入探讨如何在Spring Boot中开发RESTful API。RESTful API 是一种基于HTTP协议的API设计方式,它遵循一组设计原则,旨在实现简洁、清晰、标准化的接口。我们将讲解RESTful API设计原则,并通过**@RestController@RequestMapping注解来创建API。此外,我们还会介绍如何处理请求参数和响应体,包括使用@RequestParam@PathVariable@RequestBody**等常用注解。


🌱 一、RESTful API的设计原则

在设计RESTful API时,我们需要遵循一系列的最佳实践和设计原则,确保接口的简洁性、可读性、易用性和可维护性。

1.1 资源(Resource)

在RESTful架构中,一切都被视为资源。资源可以是数据库中的一条记录、一个集合,甚至是一个操作。每个资源都有一个唯一的标识符,通常是URI(统一资源标识符)。

例如:

  • /users:表示所有用户的资源。
  • /users/{id}:表示ID为{id}的单个用户。

1.2 使用HTTP动词(Verbs)

RESTful API的操作通过HTTP动词来标识。常用的HTTP动词包括:

  • GET:用于查询资源。
  • POST:用于创建新的资源。
  • PUT:用于更新现有资源。
  • DELETE:用于删除资源。

1.3 无状态(Stateless)

每个HTTP请求都应该包含完成请求所需的所有信息。服务器不会存储客户端的状态信息。每次请求都应该是独立的,所有的状态信息都应该由客户端管理。

1.4 统一接口(Uniform Interface)

RESTful API应该有统一的接口,不同的客户端和服务器可以通过该接口进行交互。设计时需要确保API的简洁性和一致性。

1.5 资源的表现(Representation)

资源可以有多种表现形式,常见的表现形式是JSONXML。客户端通过请求获取资源的表现形式,并可以提交数据进行更新或创建操作。

例如,一个用户资源可能具有如下的JSON表现形式:

{
  "id": 1,
  "name": "John Doe",
  "email": "john.doe@example.com"
}

1.6 HTTP状态码(Status Codes)

在响应中使用HTTP状态码来表示请求的结果。常用的状态码包括:

  • 200 OK:请求成功并返回数据。
  • 201 Created:成功创建了资源。
  • 400 Bad Request:客户端请求无效。
  • 404 Not Found:请求的资源不存在。
  • 500 Internal Server Error:服务器内部错误。

🛠️ 二、使用@RestController与@RequestMapping创建API

Spring Boot提供了@RestController@RequestMapping注解来帮助我们简化RESTful API的开发。我们通过这些注解可以轻松地创建REST API,并处理不同类型的HTTP请求。

2.1 使用@RestController

@RestController是一个方便的注解,它结合了@Controller@ResponseBody,用于创建RESTful API。在一个类上使用@RestController,表示该类中的所有方法返回的都是HTTP响应体,不会被视图解析器处理。

import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    // API逻辑将在这里实现
}

2.2 使用@RequestMapping

@RequestMapping注解用于将HTTP请求映射到对应的处理方法上。你可以使用@RequestMapping来指定请求的URL路径以及HTTP方法类型(如GET、POST、PUT、DELETE等)。

示例:创建一个简单的GET请求

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@RestController
public class UserController {

    // 创建一个处理GET请求的API
    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public String getUsers() {
        return "Returning list of users";
    }
}

上面的代码创建了一个简单的GET请求,客户端访问/users时,会调用getUsers()方法。

示例:创建一个POST请求

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMethod;

@RestController
public class UserController {

    // 创建一个处理POST请求的API,接收请求体
    @RequestMapping(value = "/users", method = RequestMethod.POST)
    public String createUser(@RequestBody User user) {
        return "Creating user: " + user.getName();
    }
}

在这个例子中,createUser()方法接收一个请求体中的User对象,并返回一个字符串。

2.3 常用的简化注解

除了@RequestMapping外,Spring Boot还提供了一些简化的注解来专门处理特定的HTTP方法:

  • @GetMapping:处理GET请求。
  • @PostMapping:处理POST请求。
  • @PutMapping:处理PUT请求。
  • @DeleteMapping:处理DELETE请求。

例如:

@GetMapping("/users")
public String getUsers() {
    return "Returning list of users";
}

@PostMapping("/users")
public String createUser(@RequestBody User user) {
    return "Creating user: " + user.getName();
}

💬 三、请求参数和响应体的处理

在开发RESTful API时,我们经常需要处理HTTP请求中的各种参数,包括查询参数、路径参数和请求体。Spring Boot提供了多种注解来帮助我们轻松地处理这些参数。

3.1 @RequestParam(请求参数)

@RequestParam用于从HTTP请求的查询字符串中提取参数。例如,/users?name=John中的name参数可以通过@RequestParam注解提取。

示例:获取查询参数

@GetMapping("/users")
public String getUserByName(@RequestParam String name) {
    return "Searching for user with name: " + name;
}

客户端可以通过如下URL来发起请求:

GET /users?name=John

name参数会被注入到getUserByName()方法中。

3.1.1 设置默认值和必填项

你可以为请求参数设置默认值,或者将其标记为必填项。

@GetMapping("/users")
public String getUser(@RequestParam(defaultValue = "Anonymous") String name) {
    return "Searching for user with name: " + name;
}

如果客户端没有传递name参数,name将使用默认值"Anonymous"

3.2 @PathVariable(路径参数)

@PathVariable用于从URL路径中提取参数。例如,/users/{id}中的id可以通过@PathVariable注解获取。

示例:获取路径参数

@GetMapping("/users/{id}")
public String getUserById(@PathVariable Long id) {
    return "Searching for user with ID: " + id;
}

客户端通过如下URL访问该API:

GET /users/1

URL中的1会被传递到getUserById()方法中的id参数。

3.3 @RequestBody(请求体)

@RequestBody用于将请求体的内容转换为Java对象。通常用于处理POST、PUT请求,接收请求体中的JSON或XML数据。

示例:接收请求体

@PostMapping("/users")
public String createUser(@RequestBody User user) {
    return "User created with name: " + user.getName();
}

客户端可以通过如下请求体创建一个用户:

{
  "name": "John",
  "email": "john.doe@example.com"
}

Spring Boot会将请求体中的JSON数据自动转换为User对象,并传递给createUser()方法。


🎉 四、总结

在这篇文章中,我们介绍了Spring Boot中开发RESTful API的基础知识,包括:

  • RESTful API设计原则:如何设计简洁、清晰的API。
  • 使用@RestController@RequestMapping创建API:如何使用Spring Boot的注解快速构建RESTful接口。
  • 请求参数和响应体的处理:如何使用@RequestParam@PathVariable@RequestBody等注解来处理HTTP请求中的参数和请求体。

Spring Boot使得开发RESTful API变得异常简单,适用于构建现代Web应用和微服务架构。希望本篇文章能帮助你更好地理解RESTful API的设计和开发技巧,让你能够高效地开发与管理API!

🧧福利赠与你🧧

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」专栏(全网一个名),bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

✨️ Who am I?

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。