昂首阔步不扫描其他jar文件中的实体类中的ApiModel和ApiModelProperty批注 [英] Swagger not scanning ApiModel and ApiModelProperty annotations in entity classes that are in a different jar file
问题描述
我有以下两个实体类。
第一类是 SampleApiEntity
:
package my.company.rest;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.hibernate.annotations.Type;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@ApiModel (
value = "SampleApiEntity",
description = "This is a sample entity from the Api package."
)
@Entity
public class SampleApiEntity
implements Serializable
{
public SampleApiEntity () {}
private static final long serialVersionUID = 1L;
@Column (nullable = false)
@ApiModelProperty (
value = "level",
required = true
)
private Integer level;
@Column (length = 255)
@ApiModelProperty (
value = "description"
)
private String description;
@Column (nullable = false)
@ApiModelProperty (
value = "time",
required = true
)
private Timestamp time;
@Id
@Column (
unique = true,
nullable = false
)
@Type (type = "pg-uuid")
@ApiModelProperty (
value = "id",
readOnly = true,
dataType = "uuid",
example = "123e4567-e89b-12d3-a456-426655440000"
)
private UUID sampleApiEntityId;
public String getDescription ()
{
return this.description;
}
public Integer getLevel ()
{
return this.level;
}
public UUID getSampleApiEntityId ()
{
return this.sampleApiEntityId;
}
public Timestamp getTime ()
{
return this.time;
}
public void setDescription (String description)
{
this.description = description;
}
public void setLevel (Integer level)
{
this.level = level;
}
public void setSampleApiEntityId (UUID sampleApiEntityId)
{
this.sampleApiEntityId = sampleApiEntityId;
}
public void setTime (Timestamp time)
{
this.time = time;
}
}
第二类是 SampleModelEntity
:
package my.company.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.hibernate.annotations.Type;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@ApiModel (
value = "SampleModelEntity",
description = "This is a sample entity from the Model package."
)
@Entity
public class SampleModelEntity
implements Serializable
{
public SampleModelEntity () {}
private static final long serialVersionUID = 1L;
@Column (nullable = false)
@ApiModelProperty (
value = "level",
required = true
)
private Integer level;
@Column (length = 255)
@ApiModelProperty (
value = "description"
)
private String description;
@Column (nullable = false)
@ApiModelProperty (
value = "time",
required = true
)
private Timestamp time;
@Id
@Column (
unique = true,
nullable = false
)
@Type (type = "pg-uuid")
@ApiModelProperty (
value = "id",
readOnly = true,
example = "123e4567-e89b-12d3-a456-426655440000"
)
private UUID sampleModelEntityId;
public String getDescription ()
{
return this.description;
}
public Integer getLevel ()
{
return this.level;
}
public UUID getSampleModelEntityId ()
{
return this.sampleModelEntityId;
}
public Timestamp getTime ()
{
return this.time;
}
public void setDescription (String description)
{
this.description = description;
}
public void setLevel (Integer level)
{
this.level = level;
}
public void setSampleModelEntityId (UUID sampleModelEntityId)
{
this.sampleModelEntityId = sampleModelEntityId;
}
public void setTime (Timestamp time)
{
this.time = time;
}
}
这两个类之间的唯一区别是在单独的JAR文件中定义。 SampleApiEntity
与REST资源类包装在同一JAR中。 SampleModelEntity
与其他实体类一起包装在单独的JAR中。生成的 swagger.yaml
文件包含两个类,但是缺少 ApiModel
和<$ c $提供的信息。 SampleModelEntity
类的c> ApiModelProperty 注释。
The only difference between the two classes is that they are defined in separate JAR files. SampleApiEntity
is packaged in the same JAR as the REST resource class. SampleModelEntity
is packaged in a separate JAR with other entity classes. The swagger.yaml
file that is generated contains both classes, but lacks information provided by the ApiModel
and ApiModelProperty
annotations for the SampleModelEntity
class.
这就是我所看到的在生成的 swagger.yaml
文件中:
Here is what I am seeing in the generated swagger.yaml
file:
SampleApiEntity:
type: "object"
required:
- "level"
- "time"
properties:
level:
type: "integer"
format: "int32"
description: "level"
description:
type: "string"
description: "description"
time:
type: "string"
format: "date-time"
description: "time"
sampleApiEntityId:
type: "string"
format: "uuid"
example: "123e4567-e89b-12d3-a456-426655440000"
description: "id"
readOnly: true
description: "This is a sample entity from the Api package."
SampleModelEntity:
type: "object"
properties:
level:
type: "integer"
format: "int32"
description:
type: "string"
time:
type: "string"
format: "date-time"
sampleModelEntityId:
type: "string"
format: "uuid"
有人可以帮助我理解为什么 ApiModel
和 ApiModelProperty
注释未在 swagger.yaml
中生成输出吗?
Can someone help me understand why the ApiModel
and ApiModelProperty
annotations are not generating output in swagger.yaml
?
推荐答案
我找到了解决方案。原来是一个类加载问题。我有一个 ear
库,该库用于部署 war
库。 war
和 ear
都包含了张扬注释工件的副本。这导致加载的注释类不同于 ear
中打包的注释类。
I found the solution. It turned out to be a class loading issue. I had an ear
library that I was using to deploy a war
library. Both the war
and the ear
contained a copy of the swagger-annotations artifact. This resulted in loaded annotation classes being different from what was packaged in the ear
.
我通过修改来解决了这个问题。我的 po
库的 pom.xml
文件。我添加了swagger-Annotation作为显式依赖项,并将其范围设置为提供的
:
I solved the problem by modifying my pom.xml
file for the war
library. I added the swagger-annotations as an explicit dependency, and set its scope as provided
:
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.10</version>
<scope>provided</scope>
</dependency>
您可以在此处找到更多信息: https://github.com/swagger-api/swagger-core/issues/2582
You can find more information here: https://github.com/swagger-api/swagger-core/issues/2582
这篇关于昂首阔步不扫描其他jar文件中的实体类中的ApiModel和ApiModelProperty批注的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!