如何生成Swagger codegen Java模型作为JPA实体

问题描述 投票:4回答:1

我正在使用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> {
}
java spring-data-jpa swagger swagger-codegen
1个回答
1
投票

所以我实际上问自己同样的问题。我找到了一个例子,但这个人只是重新定义他的POJO并提供一种方法来使生成的那些适应手写的那些。乏味而不是进化。

在全球范围内,这可能很难,因为我不确定你的招摇是否有办法决定哪个POJO将启用JPA,也许你不希望它们全部存在于你的数据库中(?)另外,如何标记id中的昂首阔步?如果您知道这种方式,您可以随时修改小胡子(我猜是pojo.mustache),为您提供缺少的注释。

© www.soinside.com 2019 - 2024. All rights reserved.