通过招摇

时间:2017-01-26 12:34:39

标签: spring swagger

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

鉴于下面的设置,swagger将显示两者请求的名称和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)
}

1 个答案:

答案 0 :(得分:0)

您可以用id注释@ApiModelProperty(hidden = true)字段,在这种情况下,它不会招摇地显示,但是如果用户输入了id,它仍将被解析并分配给id字段,因此您还需要仅使用setter

注释id的@JsonIgnore方法
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;
    }
}