Spring Auto Rest Docs документирует все подтипы Json
У меня есть услуга Rest с двумя операциями / балансом и / транзакциями для получения баланса и транзакций клиента.
Тип возврата этой операции - BalanceResponse и TransactionResponse, и оба эти типа являются расширением от Response.
при документировании операций службы /balance также перечисляются поля ответа во втором подтипе (TransactionResponse).
Как отобразить только поля, соответствующие его типу возврата? Если его / баланс, то отображать (статус, баланс и ограничения), а Если его / транзакция отображается только (статус и список транзакций) в поле Ответ
Может кто-нибудь, дайте мне знать, как обрабатывать в основном типы наследования в документах
Пожалуйста, найдите ниже фрагмент кода и документ, созданный 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 Response field
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();
}