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

2024-07-21 1759阅读

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文件中:

      
          
            org.springframework.boot  
            spring-boot-starter-web  
          
          
    
    

    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 users = new HashMap();  
        private long idCounter = 0;  
      
        // 创建用户  
        @PostMapping  
        public ResponseEntity createUser(@RequestBody User user) {  
            user.setId(++idCounter);  
            users.put(user.getId(), user);  
            return new ResponseEntity(user, HttpStatus.CREATED);  
        }  
      
        // 读取用户  
        @GetMapping("/{id}")  
        public ResponseEntity getUser(@PathVariable long id) {  
        	
            User user = users.get(id);  
            
            return user != null ? new ResponseEntity(user, HttpStatus.OK) : new ResponseEntity(user, HttpStatus.NOT_FOUND);  
        }  
      
        // 更新用户  
        @PutMapping("/{id}")  
        public ResponseEntity 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(existingUser, HttpStatus.OK);  
            } else {  
                return new ResponseEntity(existingUser, HttpStatus.NOT_FOUND);  
            }  
        }  
      
        // 删除用户  
        @DeleteMapping("/{id}")  
        public ResponseEntity deleteUser(@PathVariable long id) {  
            users.remove(id);  
            return new ResponseEntity(HttpStatus.NO_CONTENT);  
        }  
    }
    

    接下来是本文的核心部分:

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

    1)类注解:

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

      2)成员变量:

      • private Map 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串:

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

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

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

          步骤三:返回结果如下:

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

          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 中加入如下代码:

          	
          	
          		org.apache.maven.plugins
          		maven-compiler-plugin
          		3.8.1
          		
          			17
          			17
          			
          				-parameters 
          			
          		
          	
            
          

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

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

          设置 URL 为 http://localhost:8080/users/1,请求方法为 PUT,并设置修改的用户信息 json串,然后点击 Send:

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

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

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

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

          结束语

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

          简单动作,深刻联结。在这技术海洋,我备好舟,等你扬帆。启航吧!

          🌟点击【关注】,解锁定期的技术惊喜,让灵感与知识的源泉不断涌动。

          👍一个【点赞】,如同心照不宣的默契,是我们共同语言的闪亮印记。

          📚【收藏】好文,搭建你的专属智慧库,让每次回望都能照亮新知之路。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]