主要思路是在实际编码开始之前编写 API 规范,然后根据API规范让OpenAPI生成模型。
第一步创建一个规范文件并根据该规范生成一个模型。
首先,我们在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 模式。此外,我们定义了一个端点来获取所有存储的书籍。
定义完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
上面的命令在目标文件夹中生成一个Book模型。
我们来看看生成的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生成一个为类中所有字段接受参数的构造函数。
示例的完整源代码可在 GitHub 上获取