从swagger响应中排除模型或属性

时间:2015-01-05 10:24:42

标签: rest cxf jax-rs swagger

我在apache cxf项目中使用了swagger,使用了@Api和@ApiOperations以及@ApiParam注释,并为其余服务生成了api文档。

但我想从Models属性或完整的模块或属性属性中排除一些字段,如EntityTag,StatusType和MediaType等。

怎么做?

我从db获取数据并将其设置为用户对象并将该用户对象传递给JAX-RS响应构建器。

以下是我的DTO对象之一:

  @ApiModel
  public class User{
  private String name;
   private String email;


 @ApiModelProperty(position = 1, required = true, notes = "used to display user name")
 public int getName() {
    return name;
 }

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

@ApiModelProperty(position = 2, required = true, notes = "used to display user email")
public int getEmail() {
    return email;
}

 public void setEmail(String email) {
    this.email= email;
 }

现在我没有看到Swagger中的User对象字段或属性返回了json格式。

我的服务类方法响应是:

    @GET
    @ApiOperation(value = "xxx", httpMethod = "GET", notes = "user details", response =  Response.class)
   public Response getUserInfo(){
        User userdto = userdaoimpl.getUserDetails();
        ResponseBuilder builder = Response.ok(user, Status.OK), MediaType.APPLICATION_JSON);
        builder.build();
 }


<bean id="swaggerConfig" class="com.wordnik.swagger.jaxrs.config.BeanConfig">
    <property name="resourcePackage" value="com.services.impl" />
    <property name="version" value="1.0.0" />
    <property name="basePath" value="http://localhost:8080/api" />
    <property name="license" value="Apache 2.0 License" />
    <property name="licenseUrl"
        value="http://www.apache.org/licenses/LICENSE-2.0.html" />
    <property name="scan" value="true" />
 </bean>

2 个答案:

答案 0 :(得分:21)

首先,您应该升级到最新的swagger-core版本,目前为1.3.12(您使用的是旧版本)。

您有3种隐藏属性的方法:

  1. 如果您使用的是JAXB注释,则可以使用@XmlTransient
  2. 如果您使用的是杰克逊,可以使用@JsonIgnore
  3. 如果您没有使用,或者不想影响模型的一般性/序列化,您可以使用Swagger的@ApiModelProperty's hidden attribute
  4. 请记住,您可能需要在getter / setter上设置这些,而不是在属性本身。玩定义,看看哪些适合你。

    关于User模型的问题,问题是您没有从@ApiOperation引用它(您也不需要httpMethod属性)。尝试按如下方式更改它:

    @ApiOperation(value = "xxx", notes = "user details", response =  User.class)
    

答案 1 :(得分:0)

您可以排除类似这样的字段:

@ApiModelProperty(position = 1, required = true, hidden=true, notes = "used to display user name")