I have the following two entity classes.
The first class is 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;
}
}
The second class is 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;
}
}
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.
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"
Can someone help me understand why the ApiModel
and ApiModelProperty
annotations are not generating output in swagger.yaml
?
SampleModelEntity
class is packaged in a separate JAR from the REST resource classes. In the pom.xml file for the REST resource package, the dependency JAR that containsSampleModelEntity
is declared with theprovided
scope. The scope appears to be causing the issue. – Timeless