如何从 RequestBody 中排除字段 - Swagger

How to exclude fields from RequestBody - Swagger

我有这个 DTO:

public class UserTo extends AbstractBaseTo {

@NotBlank(message = "Name must not be blank")
@Size(min = 2, max = 100, message = "Name length must be between 2 and 100 characters")
private String name;

@Email(message = "Email must accord email pattern")
@NotBlank(message = "Email must not be blank")
@Size(max = 100, message = "Email length must be 100 characters max")
private String email;

@NotBlank(message = "Password must not be blank")
@Size(min = 5, max = 32, message = "Password length must be between 5 and 32 characters")
private String password;
.......

我在我的 UserController 的许多方法中使用这个 DTO,但是,例如,在登录方法中我只使用其中的两个字段:电子邮件和密码。

当我使用 Swagger 为我的 API 创建文档时,它会在登录方法的文档中显示 UserTo 的所有字段。我希望它只显示两个字段。我怎样才能做到这一点?我不想创建额外的 DTO(有 2 或 3 个字段,你知道的)。我尝试使用来自 Swagger 的 @RequestBody 注释来创建一些所需的 RequestBody 示例,但它不起作用。

我使用 Spring Boot 和 springfox 3.0.0.

您可以使用

隐藏 swagger ui 中的参数
@ApiModelProperty(hidden = true)

带有您不想显示的字段。但是隐藏字段将在你的招摇 ui.

中为每个 api 隐藏

还有另一种方法要求uires 你创建另一个 dto。您可以创建另一个 Dto 并要求 springfox 显示新的备用 dto 而不是原始的。

    @PostMapping(value = "/someapi")
    @ApiImplicitParams({
            @ApiImplicitParam(
                    name = "request",
                    dataTypeClass = AdditionalModel.class
            )
    })
    public Response hello(@RequestBody Request request){
        return new Response();
    }

这种方法不会让您更改代码,但您会被要求uired 创建另一个 dto。 此外,您还需要在 Docket Bean 中注册 AdditionalModel。

    @Bean
    public Docket petApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .pathMapping("/")
           .additionalModels(typeResolver.resolve(AdditionalModel.class));
    }