1. 概述
Lombok 是一個 Java 庫,可以幫助減少樣板代碼,例如 getter、setter 等。
OpenAPI 提供了一個屬性,用於使用 Lombok 註解自動生成模型。
在本教程中,我們將探索如何使用 OpenAPI 代碼生成器生成帶有 Lombok 註解的模型。
2. 項目設置
首先,讓我們創建一個 Spring Boot 項目,並添加 Spring Boot Starter Web 和 Lombok 依賴項:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
此外,我們需要 Swagger Annotations、Gson 和 Java Annotation API 等依賴項,以及更多依賴項,以防止因生成代碼中的包相關問題出現錯誤:
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
<version>2.2.19</version>
</dependency>
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>jackson-databind-nullable</artifactId>
<version>7.1.0</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.1.0</version>
</dependency>在下一部分,我們將為名為 Book 的模型創建 API 規範,然後使用 OpenAPI 代碼生成器生成帶有 Lombok 註解的代碼。
3. 使用 OpenAPI 生成模型
OpenAPI 的理念是,在開始編寫代碼之前,先編寫 API 規範。
在這裏,我們將創建一個規範文件並根據規範生成模型。
3.1. 創建模型規範
首先,在 resources 文件夾中創建一個名為 bookapi.yml 的新文件,以定義 Book 規範:
openapi: 3.0.2
info:
version: 1.0.0
title: Book Store
license:
name: MIT
paths:
/books:
get:
tags:
- book
summary: Get All Books
responses:
200:
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Book'
404:
description: Book not found
content: { }
components:
schemas:
Book:
type: object
required:
- id
- name
- author
properties:
id:
type: integer
format: int64
name:
type: string
author:
type: string
在上述規範中,我們定義了 Book 模式,包含 id、name 和 author 字段。此外,我們還定義了一個端點來獲取所有存儲的書籍。
3.2. 使用 Lombok 註解生成模型
在定義 API 規範之後,我們將 OpenAPI 插件 添加到 pom.xml 中,以根據規範生成代碼:
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>7.7.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/bookapi.yml</inputSpec>
<generatorName>spring</generatorName>
<configOptions>
<additionalModelTypeAnnotations>@lombok.Data @lombok.NoArgsConstructor @lombok.AllArgsConstructor</additionalModelTypeAnnotations>
</configOptions>
<generateApis>false</generateApis>
<generateSupportingFiles>false</generateSupportingFiles>
<generateApiDocumentation>false</generateApiDocumentation>
<configOptions>
<useJakartaEe>true</useJakartaEe>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>在這裏,我們指定插件在生成過程中檢查規範文件的位置。同時,我們添加了 additionalModelTypeAnnotations 屬性,為模型添加了三個 Lombok 註解。
為了簡化,我們禁用生成輔助文件和 API 文檔。
最後,讓我們通過執行 Maven install 命令生成模型:
$ ./mvnw install
上述命令會在 target 文件夾中生成一個 Book 模型。
3.3. 生成代碼
下面是生成的 Book 模型:
@lombok.Data @lombok.NoArgsConstructor @lombok.AllArgsConstructor
@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2024-01-03T22:22:14.557819500+02:00[Europe/Bucharest]")
public class Book {
private Long id;
private String name;
private String author;
// ..
}在生成的代碼中,我們使用插件的 additionalModelTypeAnnotations 屬性添加的三個 Lombok 註解應用到模型類中。
@Data 註解在編譯時幫助生成 getter、setter 等方法。 @NoArgsConstructor 生成一個空構造函數,而 @AllArgsConstructor 則生成一個接受類中所有字段參數的構造函數。
4. 結論
在本文中,我們學習瞭如何使用 OpenAPI 代碼生成器生成帶有 Lombok 註解的模型。添加 <em>additionalModelTypeAnnotations</em> 屬性使我們能夠添加所需的 Lombok 註解,從而提供了靈活性。