Как создать Java-модели Swagger Codegen в качестве объектов JPA - PullRequest
0 голосов
/ 05 февраля 2019

Я использую кодовый код Swagger для создания моделей Java, которые будут использоваться на сервере Spring REST, и хотел бы узнать, как заставить 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 автоматически выставлял эти сгенерированные классы как API-интерфейсы REST, - это добавить следующее в мой pom.xml:

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

Тогда я мог бы создать репозитории JPA с Spring-Data, как показано ниже:

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

1 Ответ

0 голосов
/ 24 февраля 2019

Так что я на самом деле задаю себе тот же вопрос.Я нашел пример, но парень просто переопределяет свои POJO и предоставляет способ адаптировать сгенерированные к написанным от руки.Утомительно и не эволюционирующе.

В глобальном масштабе это может быть сложно, потому что я не уверен, что в вашем чванстве есть способ решить, для какого POJO будет включена JPA, и, возможно, вы не хотите, чтобы они все были в вашей БД (?) Кроме того, как вам пометить идентификатор в чванство?Если вы знаете такой способ, вы всегда можете изменить усы (я думаю, pojo.mustache), чтобы дать вам аннотации, которые вы пропустили.

...