2015-01-05 53 views
6

我在apache cxf項目中使用了swagger,使用了@Api和@ApiOperations和@ApiParam註釋,併爲其餘服務生成了api文檔。從swagger響應中排除模型或屬性

但我想從模型屬性或完整的模塊或屬性屬性中排除一些像EntityTag,StatusType和MediaType等字段。

如何做到這一點?

我從數據庫中獲取數據並將其設置爲用戶對象並將該用戶對象傳遞給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; 
} 

現在我看不到裏面揚鞭用戶對象字段或屬性返回的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> 
+0

你使用哪個版本的swagger-core? – Ron

回答

15

首先,你應該升級到最新的招搖核心版本,目前1.3.12(您使用的是真的老了一個)。

你有3種方法來隱藏屬性:

  1. 如果你使用JAXB註釋,你可以使用@XmlTransient
  2. 如果您使用的是傑克遜,您可以使用@JsonIgnore
  3. 如果您不使用或不想影響模型的一般de /序列化,您可以使用Swagger的@ApiModelProperty's hidden attribute

請記住,您可能需要將這些設置在您的getters/setters而不是屬性本身上。玩這些定義,看看什麼適合你。

關於用戶模型的問題,問題是您沒有從@ApiOperation引用它(您也不需要httpMethod屬性)。嘗試改變它如下:

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

這些字段是DTO對象的一部分。 swagger核心不發明領域;) – Ron

+0

我不明白你的意思是'內部模型'。你說你成功地隱藏了字段,所以我不確定你想要解決什麼。 – Ron

+0

看到我更新的問題..!爲什麼它不顯示用戶對象屬性。它顯示EntityTag,媒體類型等..而不是用戶對象..你是否得到了我的問題 – LazyGuy