使用 Spring Boot 构建 REST API
Spring Boot 是一个 Java 框架,可以快速启动服务器项目。大部分默认配置都已准备好,例如内置的 Tomcat 服务器、数据库访问和 JSON 转换。本文将用三层结构构建一个小型 REST API:Controller、Service 和 Repository。
测试说明:编写本文所用的电脑没有 Maven 或 Gradle,也未在此测试 Spring 库的下载。下面的代码是标准写法。请自行运行并确认结果后再用于实际项目。
需要准备的东西
- JDK 17 或更新版本
- Maven 或 Gradle
- 安装了 Spring Boot 扩展的 VS Code,或 IntelliJ IDEA
三层结构
第 1 步:创建项目
访问 https://start.spring.io,选择 Maven 和 Java 17,添加 Spring Web 与 Spring Data JPA 依赖,生成并解压项目。
第 2 步:数据类
package com.example.demo;
import jakarta.persistence.*;
@Entity
public class Note {
@Id
@GeneratedValue
private Long id;
private String title;
public Note() {}
public Note(String title) { this.title = title; }
public Long getId() { return id; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
}
第 3 步:Repository
package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface NoteRepository extends JpaRepository<Note, Long> {
}
Spring Data 通过继承 `JpaRepository` 自动提供 `findAll`、`save`、`deleteById` 等基本方法。
第 4 步:Service
package com.example.demo;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class NoteService {
private final NoteRepository repository;
public NoteService(NoteRepository repository) {
this.repository = repository;
}
public List<Note> all() {
return repository.findAll();
}
public Note create(String title) {
return repository.save(new Note(title));
}
}
第 5 步:Controller
package com.example.demo;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/notes")
public class NoteController {
private final NoteService service;
public NoteController(NoteService service) {
this.service = service;
}
@GetMapping
public List<Note> list() {
return service.all();
}
@PostMapping
public Note create(@RequestBody Note body) {
return service.create(body.getTitle());
}
}
第 6 步:运行与测试
./mvnw spring-boot:run
使用 curl 测试:
curl -X POST http://localhost:8080/api/notes -H "Content-Type: application/json" -d "{\"title\":\"ซื้อกาแฟ\"}"
curl http://localhost:8080/api/notes
常见错误
- **包名与文件夹结构不一致:** Spring 从主包开始查找类,因此应把类放在标注了 `@SpringBootApplication` 的类所在的包下。
- **未添加数据库驱动:** 连接会失败。请添加驱动并配置 `application.properties`。
- **未验证就保存无效数据:** 保存前使用 Bean Validation 进行检查。
下一步
添加输入验证,使用 `@ControllerAdvice` 统一处理错误,并用 JUnit 测试 Service。
总结
Spring Boot 把 REST API 分为三层:Controller 接收请求,Service 处理逻辑,Repository 与数据库通信。这种分层让代码更容易测试和维护。