Spring Boot实战:构建一个简单的RESTful API

embedded/2025/1/2 1:06:46/

       Spring Boot是一个开源框架,旨在简化Spring应用的创建与开发过程。通过Spring Boot,你可以轻松地创建独立、生产级的Spring应用,而不需要复杂的配置。本教程将带领大家一步一步构建一个简单的RESTful API,演示Spring Boot的核心功能。

一、项目准备

1.1 创建Spring Boot项目

       我们将通过Spring Initializr来创建Spring Boot项目。Spring Initializr是一个提供Web界面来生成Spring Boot项目的工具,您可以在https://start.spring.io访问它。

       选择以下配置:

  • Project: Maven Project
  • Language: Java
  • Spring Boot: 选择最新的稳定版本
  • Project Metadata:
    • Group: com.example
    • Artifact: springboot-demo
    • Name: springboot-demo
    • Description: A demo project for Spring Boot
    • Package name: com.example.springbootdemo
    • Packaging: Jar
    • Java: 11或更高版本

       选择依赖项(Dependencies):

  • Spring Web:构建RESTful Web应用所需的基本依赖
  • Spring Data JPA:用于数据库访问
  • H2 Database:一个轻量级的嵌入式数据库,用于存储数据
  • Spring Boot DevTools:提供热部署功能,便于开发过程中的实时更新

       点击"Generate"按钮下载生成的项目文件并解压。

1.2 导入项目到IDE

       将解压后的项目导入到你的IDE中(如IntelliJ IDEA、Eclipse等)。IDE会自动识别并加载Maven项目。

二、创建简单的RESTful API

2.1 编写实体类

       首先,我们将创建一个简单的Book实体类,用于表示图书数据。

       src/main/java/com/example/springbootdemo/model目录下创建一个名为Book.java的文件:

package com.example.springbootdemo.model;import javax.persistence.Entity;
import javax.persistence.Id;@Entity
public class Book {@Idprivate Long id;private String title;private String author;// 构造器public Book() {}public Book(Long id, String title, String author) {this.id = id;this.title = title;this.author = author;}// Getter和Setter方法public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}
}

2.2 创建Repository接口

       为了实现对Book实体的CRUD操作,我们将使用Spring Data JPA。接下来,我们创建一个BookRepository接口,它会继承JpaRepository接口,提供基本的数据库操作。

       src/main/java/com/example/springbootdemo/repository目录下创建BookRepository.java

package com.example.springbootdemo.repository;import com.example.springbootdemo.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;public interface BookRepository extends JpaRepository<Book, Long> {
}

       JpaRepository提供了常用的数据库操作方法,如save()findAll()findById()等。

2.3 创建Controller类

       接下来,我们创建一个BookController类,来实现RESTful API的接口。在src/main/java/com/example/springbootdemo/controller目录下创建BookController.java

package com.example.springbootdemo.controller;import com.example.springbootdemo.model.Book;
import com.example.springbootdemo.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;
import java.util.Optional;@RestController
@RequestMapping("/api/books")
public class BookController {@Autowiredprivate BookRepository bookRepository;// 获取所有图书@GetMappingpublic List<Book> getAllBooks() {return bookRepository.findAll();}// 根据ID获取单本图书@GetMapping("/{id}")public Optional<Book> getBookById(@PathVariable Long id) {return bookRepository.findById(id);}// 创建新图书@PostMappingpublic Book createBook(@RequestBody Book book) {return bookRepository.save(book);}// 更新图书信息@PutMapping("/{id}")public Book updateBook(@PathVariable Long id, @RequestBody Book book) {if (bookRepository.existsById(id)) {book.setId(id);return bookRepository.save(book);} else {return null; // 或者抛出异常}}// 删除图书@DeleteMapping("/{id}")public void deleteBook(@PathVariable Long id) {bookRepository.deleteById(id);}
}

2.4 配置应用程序

       src/main/resources/application.properties中配置数据库连接(在此案例中使用H2数据库):

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update
  • spring.datasource.url:配置数据库连接,这里使用内存中的H2数据库。
  • spring.jpa.hibernate.ddl-auto=update:自动根据实体类更新数据库表结构。

2.5 启动应用程序

       src/main/java/com/example/springbootdemo/SpringbootDemoApplication.java中,Spring Boot的主启动类会自动启动应用:

package com.example.springbootdemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringbootDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringbootDemoApplication.class, args);}
}

2.6 运行项目

       点击IDE中的“运行”按钮,启动Spring Boot应用程序。应用会在默认端口8080上启动。

三、测试API接口

使用Postman或cURL测试RESTful API:

  • GET /api/books:获取所有图书
  • GET /api/books/{id}:根据ID获取单本图书
  • POST /api/books:创建新图书
    • 请求体:{"id": 1, "title": "Spring Boot Guide", "author": "John Doe"}
  • PUT /api/books/{id}:更新图书信息
    • 请求体:{"title": "Spring Boot Guide Updated", "author": "John Doe"}
  • DELETE /api/books/{id}:删除图书

四、总结

       通过这篇教程,我们展示了如何使用Spring Boot快速构建一个RESTful API,包括创建实体类、编写Repository、实现Controller等关键步骤。在此基础上,您可以继续扩展应用,加入认证、权限控制、复杂的业务逻辑等功能,构建一个完整的Web应用。

       Spring Boot让开发者可以专注于业务逻辑,而无需过多关注配置和集成细节,是构建现代Web应用的理想选择。


http://www.ppmy.cn/embedded/149893.html

相关文章

react+antd的Table组件编辑单元格

需求&#xff1a;新增加一行&#xff0c;且单元格可以编辑 场景&#xff1a;真实的业务需求&#xff08;antd 3 版本react&#xff09; 效果图&#xff1a;1. 默认增加一行时&#xff0c;第一列是下拉选择框&#xff0c;第2 3列是TextArea&#xff0c;图1 2. 当下拉选择的数据不…

计算机网络•自顶向下方法:计算机网络和因特网

因特网的具体构成 终端&#xff08;host&#xff09;也称端系统&#xff08;end system&#xff09;&#xff1a;运行应用程序 通信链路&#xff1a;光纤&#xff0c;铜线&#xff0c;电磁波&#xff0c; 主要指标为传输速率&#xff0c;也称带宽(bandwidth) 交换设备&#x…

Vite内网ip访问,两种配置方式和修改端口号教程

目录 问题 两种解决方式 结果 总结 preview.host preview.port 问题 使用vite运行项目的时候&#xff0c;控制台会只出现127.0.0.1&#xff08;localhost&#xff09;本地地址访问项目。不可以通过公司内网ip访问&#xff0c;其他团队成员无法访问&#xff0c;这是因为没…

Java-37 深入浅出 Spring - IoC容器体系 循环依赖 原型Bean 原型作用域 Lazy ObjectFactory

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 章节内容 上节我们完成了&#xff1a; BeanFact…

多因子模型连载

多因子模型 (Multi-Factor Model)是量化投资中的一种重要工具&#xff0c;用于解释和预测股票收益。它通过将多个不同的因子&#xff08;如市值、动量、价值、质量等&#xff09;结合起来&#xff0c;构建一个综合的模型来评估股票的表现。多因子模型不仅能够捕捉单个因子的影响…

LeetCode 242. 有效的字母异位词 (C++实现)

1. 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的 字母异位词 。 示例 1&#xff1a; 输入: s “anagram”, t “nagaram” 输出: true 示例 2&#xff1a; 输入: s “rat”, t “car” 输出: false 2. 解题思路 首先定义有26个元素…

Flink的多流转换(分流-侧输出流、合流-union、connect、join)

在实际应用中&#xff0c;我们可能要将多个不同来源的数据连接合并在一起进行处理&#xff0c;也有可能要将一条流拆分成多条流进行处理&#xff0c;这就涉及到了Flink的多流转换问题。简单来说&#xff0c;就是分流和合流两大操作&#xff0c;分流主要通过侧输出流实现&#x…

Prompt提示工程上手指南(七)Prompt编写实战-基于智能客服问答系统下的Prompt编写

前言 本系列文章从最初的基础原理与入门实践切入&#xff0c;一直延伸到主流策略、引导策略、RAG&#xff08;检索增强生成&#xff09;、思维树&#xff08;ToT&#xff09;与避免幻觉&#xff08;Hallucination&#xff09;的策略这种渐进的结构方便了对初学者和进阶者的双向…