使用 Spring Boot 构建 REST API

使用 Spring Boot 构建 REST API

Spring Boot 是一个 Java 框架,可以快速启动服务器项目。大部分默认配置都已准备好,例如内置的 Tomcat 服务器、数据库访问和 JSON 转换。本文将用三层结构构建一个小型 REST API:Controller、Service 和 Repository。

测试说明:编写本文所用的电脑没有 Maven 或 Gradle,也未在此测试 Spring 库的下载。下面的代码是标准写法。请自行运行并确认结果后再用于实际项目。

需要准备的东西

三层结构

示意图:Controller 接收 HTTP 请求并交给 Service,Service 通过 Repository 访问数据库
示意图:Controller 接收 HTTP 请求并交给 Service,Service 通过 Repository 访问数据库

第 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

常见错误

下一步

添加输入验证,使用 `@ControllerAdvice` 统一处理错误,并用 JUnit 测试 Service。

总结

Spring Boot 把 REST API 分为三层:Controller 接收请求,Service 处理逻辑,Repository 与数据库通信。这种分层让代码更容易测试和维护。