我正在使用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> {
}
所以我实际上问自己同样的问题。我找到了一个例子,但这个人只是重新定义他的POJO并提供一种方法来使生成的那些适应手写的那些。乏味而不是进化。
在全球范围内,这可能很难,因为我不确定你的招摇是否有办法决定哪个POJO将启用JPA,也许你不希望它们全部存在于你的数据库中(?)另外,如何标记id中的昂首阔步?如果您知道这种方式,您可以随时修改小胡子(我猜是pojo.mustache),为您提供缺少的注释。