知識庫 / REST RSS 訂閱

使用 OpenAPI 和 Lombok 註解生成模型

REST
HongKong
9
03:37 AM · Dec 06 ,2025

1. 概述

Lombok 是一個 Java 庫,可以幫助減少樣板代碼,例如 getter、setter 等

OpenAPI 提供了一個屬性,用於使用 Lombok 註解自動生成模型。

在本教程中,我們將探索如何使用 OpenAPI 代碼生成器生成帶有 Lombok 註解的模型。

2. 項目設置

首先,讓我們創建一個 Spring Boot 項目,並添加 Spring Boot Starter WebLombok 依賴項:

<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 模式,包含 idnameauthor 字段。此外,我們還定義了一個端點來獲取所有存儲的書籍。

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 註解,從而提供了靈活性。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.