如何从requestbody中排除字段-swagger

62o28rlo  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(911)

我有这个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,但是,例如,在login方法中,我只使用两个字段:email和password。
当我使用swagger为我的api创建文档时,它会在login方法的文档中显示userto的所有字段。我希望它只显示两个字段。我该怎么做?我不想创建额外的dto(您知道,有2或3个字段)。我试着使用swagger的@requestbody注解来创建所需requestbody的一些示例,但它不起作用。
我使用SpringBoot和SpringFox3.0.0。

pcww981p

pcww981p1#

您可以使用

@ApiModelProperty(hidden = true)

不想显示的字段。但是隐藏字段对于您的swagger ui中的每个api都是隐藏的。
还有一种方法需要您创建另一个dto。您可以创建另一个dto,并要求springfox显示新的替代dto,而不是原来的dto。

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

这种方法不会使您更改代码,但您需要创建另一个dto。此外,还需要在DocketBean中注册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));
    }

相关问题