0

我有一个带有两个操作 /balance 和 /transactions 的 Rest 服务来获取客户的余额和交易。

此操作的返回类型是 BalanceResponse 和 TransactionResponse,这两种类型都是从 Response 扩展而来的

在记录 /balance 服务操作时,它还会在第二个 subType(TransactionResponse) 中列出响应字段。

如何仅显示与其返回类型对应的字段?如果它的 /balance 则显示(状态、余额和限制),并且如果它的 /transaction 仅在响应字段中显示(状态和交易列表)

有人可以让我知道如何处理文档中的基本继承类型

请在下面找到代码片段和 Auto RestDoc 生成的文档

//Base class
@JsonTypeInfo(use = NAME, include = PROPERTY, property = "type", visible = true)
@JsonSubTypes({
        @JsonSubTypes.Type(value = BalanceResponse.class, name = "BalanceResponse"),
        @JsonSubTypes.Type(value = TransactionsResponse.class, name = "TransactionResponse")})
public class Response {
    public Status status;
....
...
    public Response(StatusCode status) {
        this.status = new Status(status.getCode(), status.getDescription());
    }

}
// Type1: BalanceResponse
@JsonPropertyOrder({ "status", "balance", "restrictions" })
public class BalanceResponse extends Response {
    /**
     * The balance of this account
     */
    public int balance = -1; 

    /**
     * List of limitations on this account.
     */
    public List<String> restrictions = Collections.emptyList();
}

// SubType-2 TransactionResponse
public class TransactionsResponse extends Response {
    public List<Transaction> transactions;

在此处输入图像描述Auto RestDoc 响应字段

4

1 回答 1

1

您需要在控制器方法中返回特定的子类型,以便 Spring Auto Rest Docs 仅输出该类型的字段。如果您返回父类型,则响应可以是任何内容,SARD 将输出所有类型的所有可能字段。

    // returns all subtype fields
    public Response anything() {
        return new BalanceResponse();
    }

    // returns only BalanceResponse fields
    public BalanceResponse balances() {
        return new BalanceResponse();
    }
于 2020-05-18T07:11:32.957 回答