引言:Java中的REST API比看起来更简单
开发REST API是现代后端开发中最受欢迎的技能之一。Java凭借其可靠性和庞大的生态系统,仍然是构建工业级API的领导者。许多初学者认为用Java编写REST API既困难又耗时。实际上,使用正确的工具(Spring Boot),你可以在30分钟内创建一个可运行的服务。
在本文中,我们将通过实践来学习如何快速创建一个完整的Java REST API。我们将编写一个小型图书管理应用程序,支持标准的CRUD操作:创建、读取、更新和删除记录。所有代码均可直接运行,你可以通过Postman或浏览器进行测试。
1. 项目准备与Spring Boot配置
创建项目最快的方法是使用Spring Initializr。这是官方项目生成器,可以创建带有所需依赖的项目模板。
1.1. 生成项目
访问start.spring.io并选择:
- Project: Maven (或Gradle)
- Language: Java
- Spring Boot: 最新稳定版本(例如3.2.x)
- Group: com.example
- Artifact: bookapi
添加依赖:
Spring Web— 用于创建REST控制器Spring Data JPA— 用于数据库操作H2 Database— 用于测试的内嵌数据库
点击"Generate",下载压缩包并解压。在IntelliJ IDEA或其他IDE中打开项目。
1.2. 项目结构
打开项目后,你将看到以下结构:
bookapi/├── src/│ ├── main/│ │ ├── java/com/example/bookapi/│ │ │ ├── BookapiApplication.java│ │ │ ├── controller/│ │ │ ├── model/│ │ │ └── repository/│ │ └── resources/│ │ └── application.properties│ └── test/└── pom.xml手动创建controller、model和repository包——这将便于导航。
2. 创建数据模型与仓库
我们从模型开始——描述"图书"实体的类。
2.1. Book类(Model)
在model包中创建Book.java文件:
package com.example.bookapi.model;
import jakarta.persistence.*;
@Entity@Table(name = "books")public class Book {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
@Column(nullable = false) private String title;
@Column(nullable = false) private String author;
private int year;
public Book() {}
public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; }
// Getters and Setters 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; }
public int getYear() { return year; } public void setYear(int year) { this.year = year; }}2.2. 仓库(Repository)
在repository包中创建BookRepository.java接口:
package com.example.bookapi.repository;
import com.example.bookapi.model.Book;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.stereotype.Repository;
import java.util.L