Spring Boot 3.3 【三】Spring Boot RESTful API 增删改查详细教程

Spring Boot RESTful API 增删改查详细教程

一、RESTful 架构风格简介

1. 简介

RESTful API 是一种基于HTTP协议的网络应用接口设计风格,它遵循REST(Representational State Transfer,表述性状态转移)原则。RESTful架构风格的出现,旨在利用现有的HTTP标准和方法,如GET、POST、PUT、DELETE等,对网络资源进行操作,使得Web服务更加简洁、易于理解和使用。

2. 优势

RESTful架构,即Representational State Transfer架构风格,是一种用于设计网络应用程序的软件架构风格。它具有多个显著的优势,这些优势共同作用,使RESTful架构成为构建现代Web服务和API的首选方式之一:

  • 无状态性:RESTful架构要求客户端与服务器之间的交互是无状态的,这意味着每次请求都包含理解该请求所需的所有信息。这简化了服务器的设计,增强了可伸缩性,因为服务器无需为单个用户会话维护状态。
  • 统一接口: RESTful架构采用了一组标准的方法(如GET, POST, PUT, DELETE等HTTP方法),使API更加易于理解和使用。
  • 分层系统: 通过分层设计,中间层可以添加缓存、负载均衡或代理功能,而不会影响客户端和服务器之间的通信。
  • 可移植性和可扩展性: RESTful服务可以轻松地在不同的平台和语言之间实现,易于集成 第三方服务,并且可以随着需求的增长而扩展。
  • 简洁性: RESTful架构通常使用轻量级的数据格式,如 JSON或XML,这使数据交换更高效。
  • 统一资源标识: RESTful架构使用 URL 来唯一标识资源,这使得资源的定位和访问变得简单直接。

二、示例代码

以下是一个使用 Spring Boot 构建的简单 RESTful API 示例,用于管理用户信息。这个示例将展示如何创建、读取、更新和删除用户信息,但不连接实际的数据库。我们将使用Java语言进行示例演示。

1. 首先,创建一个Spring Boot项目,并添加必要的依赖项到你的pom.xml文件中:

<dependencies>  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency>  
    <!-- 其他依赖项可以根据需要添加 -->  
</dependencies>

2. 接下来,创建一个用户模型 User.java

package com.jsglxx.model;

public class User {  
    private long id;  
    private String name;  
    private String email;  
  
    // 构造函数  
    public User() {  
    }  
  
    public User(long id, String name, String email) {  
        this.id = id;  
        this.name = name;  
        this.email = email;  
    }  
  
    // getter和setter方法  
    public long getId() {  
        return id;  
    }  
  
    public void setId(long id) {  
        this.id = id;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getEmail() {  
        return email;  
    }  
  
    public void setEmail(String email) {  
        this.email = email;  
    }  
}

3. 创建一个用户控制器 UserController.java :

package com.jsglxx.controller;
import com.jsglxx.model.User;

import org.springframework.http.HttpStatus;  
import org.springframework.http.ResponseEntity;  
import org.springframework.web.bind.annotation.*;  
  
import java.util.*;  

  
@RestController  
@RequestMapping("/users")  
public class UserController {  
  
    // 模拟的用户数据存储  
    private Map<Long, User> users = new HashMap<Long, User>();  
    private long idCounter = 0;  
  
    // 创建用户  
    @PostMapping  
    public ResponseEntity<User> createUser(@RequestBody User user) {  
        user.setId(++idCounter);  
        users.put(user.getId(), user);  
        return new ResponseEntity<User>(user, HttpStatus.CREATED);  
    }  
  
    // 读取用户  
    @GetMapping("/{id}")  
    public ResponseEntity<User> getUser(@PathVariable long id) {  
    	
        User user = users.get(id);  
        
        return user != null ? new ResponseEntity<User>(user, HttpStatus.OK) : new ResponseEntity<User>(user, HttpStatus.NOT_FOUND);  
    }  
  
    // 更新用户  
    @PutMapping("/{id}")  
    public ResponseEntity<User> updateUser(@PathVariable long id, @RequestBody User user) {  
        User existingUser = users.get(id);  
        if (existingUser != null) {  
            existingUser.setName(user.getName());  
            existingUser.setEmail(user.getEmail());  
            users.put(id, existingUser);  
            return new ResponseEntity<User>(existingUser, HttpStatus.OK);  
        } else {  
            return new ResponseEntity<User>(existingUser, HttpStatus.NOT_FOUND);  
        }  
    }  
  
    // 删除用户  
    @DeleteMapping("/{id}")  
    public ResponseEntity<Void> deleteUser(@PathVariable long id) {  
        users.remove(id);  
        return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);  
    }  
}

接下来是本文的核心部分
这段代码是一个典型的Spring Boot控制器类,用于处理与 用户 相关的 RESTful API 请求。以下是对代码核心部分的解读:

1)类注解:

  • @RestController:表明这是一个REST风格的控制器,其中的方法返回值会直接作为HTTP响应体返回。
  • @RequestMapping(“/users”):指定该控制器处理所有以 /users 开头的请求。

2)成员变量:

  • private Map<Long, User> users:用于模拟用户数据的存储,使用 HashMap实现。
  • private long idCounter:用于生成用户ID的计数器。

3)方法:

  • createUser(@RequestBody User user):Spring Boot 使用 @PostMapping 处理POST请求,用于创建新用户。方法接受一个 User 对象作为请求体,将其ID设置为 idCounter 的下一个值,并将其存储在 users 映射中。然后,返回一个带有 HttpStatus.CREATED 状态码的 ResponseEntity 对象。
  • getUser(@PathVariable long id):Spring Boot 使用 @GetMapping(“/{id}”) 处理GET请求,用于读取指定ID的用户。方法通过 @PathVariable 注解获取URL中的 id 参数,并从 users 映射中检索对应的用户。如果用户存在,则返回一个带有 HttpStatus.OK 状态码的 ResponseEntity 对象;否则,返回一个带有 HttpStatus.NOT_FOUND 状态码的 ResponseEntity 对象。
  • updateUser(@PathVariable long id, @RequestBody User user):Spring Boot 使用 @PutMapping(“/{id}”) 处理PUT请求,用于更新指定ID的用户。方法通过 @PathVariable 注解获取URL中的 id 参数,并通过 @RequestBody 注解获取请求体中的 User 对象。然后,从 users 映射中检索对应的用户,并更新其名称和电子邮件地址。最后,返回一个带有 HttpStatus.OK 状态码的 ResponseEntity 对象,或者如果用户不存在,则返回一个带有 HttpStatus.NOT_FOUND 状态码的 ResponseEntity 对象。
  • deleteUser(@PathVariable long id):Spring Boot 使用 @DeleteMapping(“/{id}”) 处理DELETE请求,用于删除指定ID的用户。方法通过 @PathVariable 注解获取URL中的 id 参数,并从 users 映射中移除对应的用户。然后,返回一个带有 HttpStatus.NO_CONTENT 状态码的 ResponseEntity 对象,表示请求已成功处理,但响应体中不包含任何内容。

4.最后,创建一个Spring Boot应用程序的主类 UserApplication.java

package com.jsglxx.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
	
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

5. 启动测试 RESTful API

现在,你可以运行 DemoApplication 类来启动 Spring Boot 应用程序。然后,你可以使用HTTP客户端(如Postman、Curl或浏览器)来测试RESTful API。这里使用Postman进行测试:

1)发送POST请求到/users来创建一个新用户:

步骤一:设置 POST请求类型请求地址raw 及请求的 json串

在这里插入图片描述

步骤二:设置 Content-Typeapplication/json,如果没有就添加该KEY-VALUE

在这里插入图片描述

步骤三:返回结果如下:

在这里插入图片描述

2)同理,发送 GET 请求到 /users/{id} 来读取一个用户:

设置 URL 为 http://localhost:8080/users/1,请求方法为 GET

注意:java1.8以上版本,需要指定-parameters参数,否则会报如下错误,这个错误信息表明Java编译器没有生成包含方法参数名称的字节码:

java.lang.IllegalArgumentException: Name for argument of type [long] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the ‘-parameters’ flag.

解决方案:
在 Pom.xml 中加入如下代码:

<plugins>	
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-compiler-plugin</artifactId>
		<version>3.8.1</version>
		<configuration>
			<source>17</source>
			<target>17</target>
			<compilerArgs>
				<arg>-parameters</arg> <!-- 这一行是关键 -->
			</compilerArgs>
		</configuration>
	</plugin>

</plugins>  

在这里插入图片描述

3)发送 PUT 请求到 /users/{id} 来更新一个用户:

设置 URL 为 http://localhost:8080/users/1,请求方法为 PUT,并设置修改的用户信息 json串,然后点击 Send
在这里插入图片描述

4) 发送 DELETE 请求到 /users/{id} 来删除一个用户:

设置 URL 为 http://localhost:8080/users/1,请求方法为 DELETE:

在这里插入图片描述

结束语

本文详细介绍了RESTful架构风格,包括其简介和优势,并通过示例代码展示了如何在Spring Boot中实现RESTful API的增删改查操作,为读者提供了全面且实用的教程。

简单动作,深刻联结。在这技术海洋,我备好舟,等你扬帆。启航吧!
🌟点击【关注】,解锁定期的技术惊喜,让灵感与知识的源泉不断涌动。
👍一个【点赞】,如同心照不宣的默契,是我们共同语言的闪亮印记。
📚【收藏】好文,搭建你的专属智慧库,让每次回望都能照亮新知之路。

相关推荐

  1. SpringBoot实现增删

    2024-07-18 10:42:02       34 阅读
  2. BaseDao封装增删(超详解!)

    2024-07-18 10:42:02       40 阅读
  3. BaseDao封装增删(超详解

    2024-07-18 10:42:02       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 10:42:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 10:42:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 10:42:02       57 阅读
  4. Python语言-面向对象

    2024-07-18 10:42:02       68 阅读

热门阅读

  1. 库卡机器人示教器 KPC2 00107-264 KPC200.107-264

    2024-07-18 10:42:02       23 阅读
  2. Redis数据结构-跳跃表 skiplist

    2024-07-18 10:42:02       18 阅读
  3. flutter 版本自动更新调研

    2024-07-18 10:42:02       20 阅读
  4. python 结合mitmproxy 抓取指定接口数据

    2024-07-18 10:42:02       22 阅读
  5. mybatis-plus仿 JPA的 GenerationType.TABLE 实现

    2024-07-18 10:42:02       22 阅读
  6. C语言 反转链表

    2024-07-18 10:42:02       22 阅读
  7. wsl的坑

    2024-07-18 10:42:02       20 阅读
  8. 在Ubuntu 18.04上安装和保护Redis的方法

    2024-07-18 10:42:02       20 阅读
  9. 今日安装了一下Eclipse,配置了SVN

    2024-07-18 10:42:02       19 阅读
  10. vue 手机右滑返回

    2024-07-18 10:42:02       21 阅读