使用Spring框架轻松构建REST API | Analytics Vidhya

作者:API传播员 · 2026-01-08 · 阅读时间:6分钟

学习能力是一种天赋;学习能力是一种技能;学习的意愿是一种选择。——布莱恩·赫伯特

在技术领域,每个人都需要从零开始。曾经,我甚至不知道“创建API,并且乐在其中。

本文旨在向您展示,API并没有想象中那么复杂。通过一个简单的示例,我们将一起学习如何使用Spring框架快速构建一个REST API


什么是API?

API(应用程序编程接口)是一种允许不同软件应用程序之间进行通信的工具。简单来说,API就像一个桥梁,帮助应用程序获取或提供数据,而无需暴露其内部实现细节。

举个例子:假设您有一个个人网站,展示了您的兴趣爱好、工作经验和项目。现在,您希望在网站上动态显示您在Spotify上的音乐偏好。手动更新这些信息显然不现实,这时Spotify的API就派上用场了。通过API,您可以直接获取Spotify上的数据,并将其展示在您的网站上。


创建初始项目结构

我们将使用Spring框架来构建API,原因如下:

  • 易于设置:Spring提供了丰富的工具和模板,便于快速启动项目。
  • 易于理解:框架的设计直观,适合初学者。
  • 易于映射概念:能够轻松将业务逻辑与代码结构对应起来。

使用Spring Initializr生成项目

  1. 访问 Spring Initializr 并设置以下属性:

    • 项目类型:选择Maven(适合新手)。
    • 语言:Java。
    • Spring Boot版本:选择2.4.1(稳定版本)。
    • 打包方式:选择Jar。
    • Java版本:选择任意支持的版本。
  2. 添加以下依赖项:

    • Spring Web:用于创建REST API。
    • Spring Data JPA:用于将Java实体映射到SQL表,并执行CRUD操作。
    • H2数据库:内存数据库,用于模拟真实数据库。
    • Lombok:减少样板代码,例如自动生成Getter和Setter方法。
  3. 点击“生成”,下载生成的项目压缩包。

  4. 将压缩包解压并导入到您喜欢的IDE(如IntelliJ IDEA)。


定义包结构

良好的包结构有助于项目的可维护性。以下是推荐的包结构:

  • controller:存放所有REST控制器。
  • model:存放Java实体类。
  • repository:存放JPA存储库,用于执行数据库操作。
  • service:存放业务逻辑。

定义Java/SQL实体

在项目中,我们将使用JPA(Java Persistence API)来定义实体类。以下是一个示例实体类Client

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "client")
public class Client {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "name")
    private String name;    @Column(name = "age")
    private Integer age;    @Column(name = "address")
    private String address;
}

关键注解说明

  • @Entity:将类标记为JPA实体。
  • @Table:指定实体对应的数据库表名。
  • @Id@GeneratedValue:标记主键,并设置自动生成策略。
  • @Column:指定字段对应的数据库列名。

定义实体存储库

存储库用于与数据库交互,例如增删改查操作。以下是一个示例存储库:

@Repository
public interface ClientRepository extends CrudRepository {
}

关键点

  • @Repository:标记为Spring的存储库组件。
  • CrudRepository:提供基础的CRUD操作方法,如findByIdsavedeleteById等。

定义服务层

服务层用于处理业务逻辑。以下是一个示例服务类:

@Service
public class ClientService {
    private final ClientRepository clientRepository;

    @Autowired
    public ClientService(ClientRepository clientRepository) {
        this.clientRepository = clientRepository;
    }    public Optional findClientById(Integer id) {
        return clientRepository.findById(id);
    }
}

关键点

  • @Service:标记为业务逻辑组件。
  • @Autowired:自动注入依赖。

创建控制器

控制器用于接收外部请求并返回响应。以下是一个示例控制器:

@RestController
@RequestMapping("/client")
public class ClientController {
    private final ClientService clientService;

    @Autowired
    public ClientController(ClientService clientService) {
        this.clientService = clientService;
    }    @GetMapping("/{id}")
    public ResponseEntity getClientById(@PathVariable Integer id) {
        return clientService.findClientById(id)
                .map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }
}

关键点

  • @RestController:标记为REST控制器。
  • @RequestMapping:定义基础URL路径。
  • @GetMapping:处理GET请求。
  • @PathVariable:将URL中的路径变量映射到方法参数。

填充数据库

由于我们使用的是内存数据库,需要在应用启动时填充一些数据。以下是一个示例:

@Component
public class DataLoader implements ApplicationRunner {
    private final ClientRepository clientRepository;

    @Autowired
    public DataLoader(ClientRepository clientRepository) {
        this.clientRepository = clientRepository;
    }    @Override
    public void run(ApplicationArguments args) {
        clientRepository.save(new Client(null, "Alice", 30, "New York"));
        clientRepository.save(new Client(null, "Bob", 25, "San Francisco"));
    }
}

启动服务并测试

在项目根目录下执行以下命令启动服务:

mvn clean install
java -jar target/client-0.0.1-SNAPSHOT.jar

启动后,您可以通过浏览器访问以下URL测试API:

http://localhost:8080/client/1

总结

通过本文的示例,我们展示了如何使用Spring框架快速构建一个API开发的恐惧,并激发您进一步探索的兴趣。

如果您有任何问题或反馈,欢迎随时分享。我们下篇文章再见!

原文链接: https://medium.com/analytics-vidhya/easily-build-your-rest-api-with-spring-framework-80941c359d44