首页 > 解决方案 > 带有 Swagger @ApiResponse 的 JsonView 类

问题描述

我有一个@JsonView名字BankAccountView.Public帮助我限制某些字段,BankAccount因为我不想在公共获取操作中发送他们的所有属性。我的问题是当我尝试使用 swagger 指定它时,因为如果我指定BankAccount.class它会显示整个对象而不是 my 中指定的所有字段@JsonView,但是如果我指定BankAccount.Public.class它会显示一个空对象。您能否告诉我 Swagger 是否可能仅显示公共字段?

这是我的代码:

// BankAccount Json View
public class BankAccountView {
    public static class Public {}
}
// BankAccount class
@ApiModel("BankAccount")
public class BankAccount {

    @ApiModelProperty
    @JsonView(BankAccountView.Public.class)
    private Long accountId;

    @ApiModelProperty
    private Long owner;

    @ApiModelProperty
    @NotBlank
    @JsonView(BankAccountView.Public.class)
    private String currency;

    @ApiModelProperty
    @NotBlank
    @JsonView(BankAccountView.Public.class)
    private String bankName;

    @ApiModelProperty
    @JsonView(BankAccountView.Public.class)
    private BankAccountType accountType;

    @ApiModelProperty
    @JsonView(BankAccountView.Public.class)
    private BankAccountStatus status;

    @ApiModelProperty
    private Instant verificationDate;

    @ApiModelProperty
    @JsonView(BankAccountView.Public.class)
    private String mask;
}
// BankAccountController class

    @ApiOperation(value = "Fetch a list of all bank accounts")
    @JsonView({BankAccountView.Public.class})
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "Bank accounts successfully retrieved", response = BankAccountView.Public.class, responseContainer = "List"),
            @ApiResponse(code = 400, message = "Validation failed", response = ApiHttpClientErrorException.class),
            @ApiResponse(code = 403, message = "User is not an employee", response = ResourceForbiddenException.class),
            @ApiResponse(code = 404, message = "User not found", response = NoSuchElementException.class),
            @ApiResponse(code = 500, message = "Internal server error", response = ApiHttpServerErrorException.class)
    })
    @GetMapping
    public List<BankAccount> getAllBankAccounts() {
        return service.getAll();
    }

非常感谢!:)

标签: javaspringspring-bootswaggerswagger-ui

解决方案


If you're using Jackson, you can use @JsonIgnore.

否则为个别属性设置隐藏真

@ApiModelProperty(position = 1, required = true, hidden=true, notes = "used to display user name")

推荐阅读