大家好,我是磊磊落落,目前我在技术上主要关注:Java、Golang、架构设计、云原生和自动化测试。欢迎来我的博客(leileiluoluo.com)获取我的最近更新!
本文原始链接:https://leileiluoluo.com/posts/building-a-restful-web-service-with-spring-boot.html
上文「如何快速搭建一个 Spring Boot 项目」介绍了使用 Spring Initializr 搭建 Spring Boot 模板项目的方法。本文接着介绍如何使用 Spring Boot 构建一个 RESTful Web 服务,主要关注项目的结构、注解的使用和单元测试代码的编写,并由此探索 Spring Boot 的设计理念与使用方法。
本文实现的 RESTful Web 服务提供用户(User)的增删改查功能,内部使用 Java ArrayList 实现数据的存储。
写作本文时,所使用的 JDK 版本、Maven 版本和 Spring Boot 版本分别为:
- JDK 版本:BellSoft Liberica JDK 17
- Maven 版本:3.9.2
- Spring Boot 版本:3.1.0
1 项目结构
本文使用三层架构代码结构,src/main/java
下主要分三个目录:controller
、model
和service
。处理请求和返回响应的逻辑控制器代码需要放在controller
目录下;表示数据对象的 POJO 类需要方在model
目录下;主要的业务逻辑代码需要抽取到服务中,然后放在service
目录下(service
目录下是接口类,impl
目录下是实现类)。
spring-boot-restful-service-demo
├─ src/main/java
│ └─ com.example.demo
│ ├─ controller
│ │ └─ UserController.java
│ ├─ model
│ │ └─ User.java
│ ├─ service
│ │ ├─ UserService.java
│ │ └─ impl
│ │ └─ UserServiceImpl.java
│ └─ DemoApplication.java
├─ src/test/java
│ └─ com.example.demo
│ └─ controller
│ └─ UserControllerTest.java
└─ pom.xml
此外,src/test/java
用于存放测试代码,测试代码应与被测试代码使用相同的包名。
2 源码分析
下面分析下该项目的源码,以期对 Spring Boot 的使用有一个基本的了解。
2.1 pom.xml 代码
Spring Boot 提供各类封装好的 Starter(以spring-boot-starter-*
格式命名)供我们去使用,当需要某项依赖时,直接在pom.xml
引用对应的 Starter 即可。
本文使用 Maven 管理依赖,pom.xml
源码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>