Pic*_*Dog 8 java spring-boot openapi springdoc-openapi-ui
我有一个抽象类和其他三个子类。我想要这三个子类作为 Swagger/OpenAPI 接口的示例。
但 Swagger/OpenApi 接口仅显示抽象类和第一个子类字段。
操作请求
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "subType", visible = true)
@JsonSubTypes({
        @JsonSubTypes.Type(value = InstallmentOperationRequest.class, name = "I"),
        @JsonSubTypes.Type(value = CreditCardOperationRequest.class, name = "C"),
        @JsonSubTypes.Type(value = SingleOperationRequest.class, name = "S")
})
@Schema(
        description = "Parent operation request",
        discriminatorProperty = "subType",
        discriminatorMapping = {
                @DiscriminatorMapping(value = "SingleOperation", schema = SingleOperationRequest.class),
                @DiscriminatorMapping(value = "InstallmentOperation", schema = InstallmentOperationRequest.class),
                @DiscriminatorMapping(value = "CreditCardOperation", schema = CreditCardOperationRequest.class)
        })
public abstract class OperationRequest {
    private String description;
    private OperationTypeEnum type;
    private OperationSubTypeEnum subType;
    private BigDecimal value;
    private String observations;
}
信用卡操作请求
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonTypeName("C")
@Schema(allOf = OperationRequest.class)
public class CreditCardOperationRequest extends OperationRequest {
    private String creditCard;
    private LocalDate creditCardOperationDate;
    private Integer creditCardInstallments;
}
单一操作请求
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonTypeName("S")
@Schema(allOf = OperationRequest.class)
public class SingleOperationRequest extends OperationRequest{
    private BigDecimal paidValue;
    private YearMonth period;
}
分期操作请求
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonTypeName("I")
@Schema(allOf = OperationRequest.class)
public class InstallmentOperationRequest extends OperationRequest{
    private Integer installments;
    private YearMonth initialInstallment;
}
生成的 Json
 ...
 "components": {
    "schemas": {
      "CreditCardOperationRequest": {
        "required": [
          "creditCard",
          "creditCardInstallments",
          "description",
          "subType",
          "type",
          "value"
        ],
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/OperationRequest"
          },
          {
            "type": "object",
            "properties": {
              "creditCard": {
                "type": "string",
                "description": "Credit card identification",
                "example": "abcd"
              },
              "creditCardOperationDate": {
                "type": "string",
                "description": "Credit card operation date",
                "format": "date",
                "example": "2021-01-10"
              },
              "creditCardInstallments": {
                "minimum": 1,
                "type": "integer",
                "description": "Number of credit card installments",
                "format": "int32",
                "example": 5
              }
            }
          }
        ]
      },
      "InstallmentOperationRequest": {
        "required": [
          "description",
          "initialInstallment",
          "installments",
          "subType",
          "type",
          "value"
        ],
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/OperationRequest"
          },
          {
            "type": "object",
            "properties": {
              "installments": {
                "minimum": 2,
                "type": "integer",
                "description": "Number of installments",
                "format": "int32",
                "example": 5
              },
              "initialInstallment": {
                "type": "string",
                "description": "Initial installment period",
                "example": "2021-01"
              }
            }
          }
        ]
      },
      "OperationRequest": {
        "required": [
          "description",
          "subType",
          "type",
          "value"
        ],
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "Operation description",
            "example": "abc"
          },
          "type": {
            "type": "string",
            "description": "Operation type",
            "enum": [
              "I",
              "E"
            ]
          },
          "subType": {
            "type": "string",
            "description": "Operation subType",
            "enum": [
              "S",
              "C",
              "I"
            ]
          },
          "value": {
            "type": "number",
            "description": "Operation value",
            "format": "double",
            "example": 32.56
          },
          "observations": {
            "maxLength": 2147483647,
            "minLength": 2,
            "type": "string",
            "description": "Observations",
            "example": "abc"
          }
        },
        "description": "Parent operation request",
        "discriminator": {
          "propertyName": "subType"
        }
      },
      "SingleOperationRequest": {
        "required": [
          "description",
          "paidValue",
          "subType",
          "type",
          "value"
        ],
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/OperationRequest"
          },
          {
            "type": "object",
            "properties": {
              "paidValue": {
                "type": "number",
                "description": "Operation paid value",
                "example": 12.56
              },
              "period": {
                "type": "string",
                "description": "Operation period",
                "example": "2021-01"
              }
            }
          }
        ]
      }
       ...
    }
  }
  ...
| 归档时间: | 
 | 
| 查看次数: | 2221 次 | 
| 最近记录: |