2015-01-05 3 views
6

私はApacheのcxfプロジェクトでswaggerを使用し、@Apiと@ApiOperationsと@ApiParamアノテーションを使用し、残りのサービスのためにAPIドキュメントを生成しました。swaggerレスポンスからモデルやプロパティを除外

しかし、私は、EntityTag、StatusType、MediaTypeなどのフィールドの一部をModels属性または完全なモジュールまたはプロパティ属性から除外したいと考えています。

どうすればよいですか?

私は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; 
} 

は、今私は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. モデルを使用していない場合や、モデルの一般的なデシリアライズに影響を与えたくない場合は、スワッガーの@ApiModelProperty's hidden attributeを使用できます。

これらのプロパティは、プロパティ自体ではなく、getter/setterで設定する必要があることに注意してください。あなたのために何が効果があるかを見るために定義で遊んでください。

Userモデルの問題点は、@ApiOperationから参照しないことです(httpMethodプロパティは不要です)。次のように変更してみてください:

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

これらのフィールドは、DTOオブジェクトの一部です。スガッガーコアはフィールドを創造しません;) – Ron

+0

私はあなたが「内側のモデル」の意味を理解していません。あなたは、あなたが解決しようとしていることがわからないので、フィールドを隠すことができます。 – Ron

+0

更新された質問を参照してください..!なぜユーザーオブジェクトのプロパティを表示していないのですか? EntityTag、MediaTypeなどを表示しています。ユーザーオブジェクトの代わりに..did uさんが私の質問を受けました – LazyGuy