Swagger注释遍历数据库中的所有表

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

我正在看一个Java应用程序,它提供了REST API来访问数据库。除了JAX-RS,它还使用Swagger生成文档和测试网站。在其中一条路线上,我已经意识到Swagger给出的结果示例非常长(超过140000行):

Swagger problem

此路线由以下代码定义:

@GET
@Path("/getUsers")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Operation(
        summary = "Get available users",
        responses = {
                @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = OauthClientDetailsEntity.class)), description = "Get users list"),
                @ApiResponse(responseCode = "401", content = @Content(schema = @Schema(implementation = ErrorResponse.class)), description = "Error: Unauthorized"),
                @ApiResponse(responseCode = "500", description = "Error: Internal Server Error")
        }
)
public Response getUsers() {
  // ....
}

“麻烦制造者”是idCliente字段,该字段在实体类中定义如下:

@JoinColumn(name = "idCliente", referencedColumnName = "id")
@ManyToOne
private Cliente idCliente;

Cliente(英语为客户)与数据库中的许多表相关,因此我认为问题在于Swagger正在遍历所有这些表,因此示例结果是如此之长。该类有40多个字段,看起来像这样:

@Entity
@Table(name = "cliente")
@XmlRootElement
public class Cliente implements Serializable {
    @OneToMany(mappedBy = "idCliente")
    private List<FacturaCliente> facturaClienteList;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idCliente")
    private List<OauthClientDetailsEntity> oauthClientDetailsEntityList;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cliente")
    private List<OauthAccessTokenEntity> oauthAccessTokenEntityList;

    @Column(name = "codigoPlantillaFacturacion")
    private String codigoPlantillaFacturacion;
    // etc...
}

我是Swagger的新手,所以我不确定如何处理此问题。有什么方法可以使Swagger不遍历所有相关表吗?或者,还有什么其他方法会更有效?

谢谢,

java swagger jax-rs
1个回答
0
投票

您可以使用@ApiModelProperty(hidden=true)忽略此字段但您必须注意,所有内容都会以任何方式呈现。如果您不需要此字段,则更好的方法是不渲染它(例如@JsonIgnore批注)。最好的选择是仅返回具有必要字段的DTO,而不是返回具有层次结构的整个实体。

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