Bootstrap

springboot swagger 同一个model 根据group 在不的api中展示不同的字段和描述

主要是为了让一个实体可以用于不同的接口展示不同的字段

代码地址 把com.demo.swagger下的代码放到自己springboot项目能被spring扫描注册组件的地方就行(其他代码是demo)

@ApiGroupProperty(value={GroupsUser.Update.class},description="")用于给Model字段分组,value控制所属组,description可以设置不同的字段描述

@ApiGroupProperties(value = {@ApiGroupProperty({)}})可以包含多个@ApiGroupProperty以便给不同分组的Model字段设置不同的字段描述

@ApiGroup(GroupsUser.Save.class) 给指定接口选择用哪个分组, 注解在方法参数表示参数用的分组, 注解在方法上表示返回值用的分组

下图两个接口公用一个User实体类(在文章后面有相关代码)

左边展示的是GroupsUser.Save.class(多了id字段,name描述变了),右边的GroupsUser.Update.class,

User里面组合的Department继承了BaseModel,所以department也会根据分组展示字段,Position没有继承BaseModel,所以展示的是全部字段

Controller接口

/**
     * User实体中字段有GroupsUser.Update.class才会展示
     * @param user
     * @return
     */
    @ApiOperation(value = "修改用户")
    @PostMapping("/update")
    @ApiGroup(GroupsUser.Update.class)
    public Response<User> update(@ApiGroup(GroupsUser.Update.class) @RequestBody User user) {
        return new Response<User>();
    }

    /**
     * User实体中字段有GroupsUser.Save.class才会展示
     */
    @ApiOperation(value = "添加用户")
    @PostMapping("/save")
    @ApiGroup(GroupsUser.Save.class)
    public Response<User> save(@ApiGroup(GroupsUser.Save.class) @RequestBody User user) {
        return new Response<User>();
    }

Model类代码

@Data
@ApiModel("用户实体")
public class User {
    @ApiGroupProperty({GroupsUser.Save.class})
    @ApiModelProperty("Id")
    private Integer id;

    @ApiGroupProperties({
            @ApiGroupProperty(value = {GroupsUser.Save.class}, description = "姓名(描述变了)"),
            @ApiGroupProperty(value = {GroupsUser.Update.class})
    })
    @ApiModelProperty("姓名")
    private String name;

    @ApiGroupProperty({GroupsUser.Save.class, GroupsUser.Update.class})
    @ApiModelProperty("电话")
    private String tel;

    @ApiGroupProperty({GroupsUser.Save.class, GroupsUser.Update.class})
    @ApiModelProperty("部门")
    private Department department;

    @ApiGroupProperty({GroupsUser.Save.class, GroupsUser.Update.class})
    @ApiModelProperty("职位")
    private Position position;

}
@Data
@ApiModel("职位实体")
public class Position {
    @ApiGroupProperty({GroupsUser.Save.class})
    @ApiModelProperty("Id")
    private Integer id;

    @ApiGroupProperties({
            @ApiGroupProperty(value = {GroupsUser.Save.class}, description = "职位名称(描述变了)"),
            @ApiGroupProperty(value = {GroupsUser.Update.class})
    })
    @ApiModelProperty("职位名称")
    private String name;

    @ApiGroupProperty({GroupsUser.Save.class, GroupsUser.Update.class})
    @ApiModelProperty("职位备注")
    private String remarks;
}
@Data
@ApiModel(description = "返回结果实体")
public class Response<T> {
    /**
     * 状态码
     */
    @ApiModelProperty("状态码")
    private int code;

    /**
     * 返回内容
     */
    @ApiModelProperty("返回内容")
    private String message;

    /**
     * 数据对象
     */
    @ApiModelProperty("数据对象")
    private T data;
}

Groups

/**
 * 用户组
 *
 * @date 2020/11/11 11:30
 */
public class GroupsUser {
    public interface Save {
    }

    public interface Update {
    }
}

 

;