gpt4 book ai didi

java - 如何将 Swagger codegen Java 模型生成为 JPA 实体

转载 作者:搜寻专家 更新时间:2023-10-31 20:31:36 32 4
gpt4 key购买 nike

我正在使用 Swagger codegen 创建要在 Spring REST 服务器中使用的 Java 模型,并且想知道如何让 Swagger 将每个模型声明为 JPA 实体。

我使用 swagger-codegen-maven-plugin 生成代码如下:

<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>2.4.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/openApi/Rack.json</inputSpec>
<language>spring</language>
<groupId>com.me</groupId>
<artifactId>rest-server</artifactId>
<apiPackage>com.me.rest.api</apiPackage>
<modelPackage>com.me.rest.model</modelPackage>
<invokerPackage>com.me.rest.invoker</invokerPackage>
<configOptions>
<sourceFolder>src/gen/java/main</sourceFolder>
<java8>true</java8>
<dateLibrary>java8</dateLibrary>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>

正如我现在所拥有的,这是生成的缩写 java 代码:

@Validated
@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "...")

public class Rack {
@JsonProperty("id")
private Long id = null;

@JsonProperty("name")
private String name = null;

...
}

如何让 Swagger 添加 @Entity 和 @Id JPA 注释,如下所示?

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@Validated
@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "...")

public class Rack {
@Id
@JsonProperty("id")
private Long id = null;

@JsonProperty("name")
private String name = null;

...
}

这样,要让 Spring 自动将这些生成的类公开为 REST API,我所要做的就是将以下内容添加到我的 pom.xml:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

然后我可以使用 Spring-Data 创建 JPA 存储库,如下所示:

public interface RackRepository extends CrudRepository<Rack, Long> {
}

最佳答案

最近合并了一个 PR 来解决您的问题:https://github.com/OpenAPITools/openapi-generator/pull/11775

您需要升级您的Maven插件以使用最新版本(目前未发布,只有快照可用)

<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>6.0.0-SNAPSHOT</version>
...
</plugin>

配置可能略有不同。

然后您需要在规范中添加 x-class-extra-annotation 和 x-field-extra-annotation。

例如宠物诊所:

  schemas:
Pet:
type: object
x-class-extra-annotation: "@javax.persistence.Entity"
required:
- id
- name
properties:
id:
type: integer
format: int64
x-field-extra-annotation: "@javax.persistence.Id"
name:
type: string
tag:
type: string

关于java - 如何将 Swagger codegen Java 模型生成为 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54537046/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com