使用帶有 Lombok 註釋的 OpenAPI 生成模型
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.28</version>
<scope>provided</scope>
</dependency>
此外,我們需要Swagger Annotations 、 Gson和Java Annotation API依賴項來防止生成代碼中與包相關的錯誤:
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</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
在上面的規範中,我們使用id
、 name
和author
字段定義Book
模式。此外,我們定義了一個端點來獲取所有存儲的書籍。
3.2.使用 Lombok 註釋生成模型
定義完API規範後,我們將OpenAPI插件添加到pom.xml
中,以幫助根據規範生成代碼:
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>4.2.3</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/bookapi.yml</inputSpec>
<generatorName>java</generatorName>
<configOptions>
<additionalModelTypeAnnotations>@lombok.Data @lombok.NoArgsConstructor @lombok.AllArgsConstructor</additionalModelTypeAnnotations>
</configOptions>
<generateApis>false</generateApis>
<generateSupportingFiles>false</generateSupportingFiles>
<generateApiDocumentation>false</generateApiDocumentation>
</configuration>
</execution>
</executions>
</plugin>
在這裡,我們指定插件在生成過程中檢查的規範文件的位置。此外,我們添加了additionalModelTypeAnnotations
屬性以向模型添加三個Lombok 註釋。
為簡單起見,我們禁用支持文件和 API 文檔的生成。
最後,讓我們通過執行 Maven install
命令來生成模型:
$ ./mvnw install
上面的命令在target
文件夾中生成一個Book
模型。
3.3.生成的代碼
我們來看看生成的Book
模型:
@lombok.Data @lombok.NoArgsConstructor @lombok.AllArgsConstructor
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2023-08-16T09:16:34.322697262Z[GMT]")
public class Book {
public static final String SERIALIZED_NAME_ID = "id";
@SerializedName(SERIALIZED_NAME_ID)
private Long id;
public static final String SERIALIZED_NAME_NAME = "name";
@SerializedName(SERIALIZED_NAME_NAME)
private String name;
public static final String SERIALIZED_NAME_AUTHOR = "author";
@SerializedName(SERIALIZED_NAME_AUTHOR)
private String author;
// ...
}
在上面生成的代碼中,我們使用additionalModelTypeAnnotations
屬性在插件中定義的三個Lombok 註釋被添加到模型類中。
@Data
註釋有助於在編譯時生成 getter、setter 等。 @NoArgsConstructor
生成一個空構造函數, @AllArgsConstructor
生成一個為類中所有字段接受參數的構造函數。
4。結論
在本文中,我們學習瞭如何使用 OpenAPI 代碼生成器生成帶有 Lombok 註釋的模型。添加additionalModelTypeAnnotations
屬性使我們可以靈活地添加所需的Lombok 註釋。
與往常一樣,示例的完整源代碼可在 GitHub 上獲取。