繁体   English   中英

在swagger中隐藏弹簧请求体中的某些字段

[英]Hide certain fields from a spring request body in swagger

下面的示例api允许用户创建对象。 用户应该能够指定Thing对象的name字段,而id字段应该自动生成。

下面给出的设置,招摇将同时显示名称和要求的东西,用户可以输入,以及显示两个字段作为可选id字段。 实际上,对于请求,应该要求name而用户永远不应输入id

(注意:创建成功时返回的对象应包括生成的id字段)

我想一个选项是创建一个相同的Thing对象的副本,除了缺少id字段(“ThingCreationRequestObject”)。

这是可接受的解决方案吗? 似乎应该有一种方法不需要维护两个基本上代表同一事物的对象。

@RequestMapping(value = "/thing", method = RequestMethod.POST)
Thing createThing(@RequestBody Thing thing) {
    // add thing to database, including a generated id
    // return thing object, now including the generated id
}

public class Thing {
    private String id;
    private String name;
}

// Swagger
Thing {
    id (string, optional),
    name (string, optional)
}

您可以使用@ApiModelProperty(hidden = true)来注释id字段,在这种情况下,它将被swagger隐藏,但是如果用户输入了id那么它将被解析并分配给id字段,因此您还需要注释setter只有@JsonIgnore的id的方法

public class Thing {

    @ApiModelProperty(hidden = true)
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    @JsonIgnore
    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM