私は、Apache cxfプロジェクトでswaggerを使用し、@ Apiと@ApiOperationsおよび@ApiParamアノテーションを使用して、残りのサービス用のapi docを生成しました。
ただし、EntityTag、StatusType、MediaTypeなどの一部のフィールドを、Models属性または完全なモジュールまたはプロパティ属性から除外したいと考えています。
どうやってするか?
私はデータベースからデータをフェッチしてユーザーオブジェクトに設定し、そのユーザーオブジェクトをJAX-RS応答ビルダーに渡していました。
以下は、私のDTOオブジェクトの1つです。
@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によって返された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>
まず、最新のswagger-coreバージョン(現在は1.3.12)にアップグレードする必要があります(本当に古いバージョンを使用しています)。
プロパティを非表示にする方法は3つあります。
@XmlTransient
を使用できます。@JsonIgnore
を使用できます。@ApiModelProperty
のhidden
属性 を使用できます。プロパティ自体ではなく、ゲッター/セッターでこれらを設定する必要がある場合があることに注意してください。定義を試して、何が効果的かを確認してください。
Userモデルの問題に関しては、@ApiOperation
から参照しないことが問題です(httpMethodプロパティも必要ありません)。次のように変更してみてください。
@ApiOperation(value = "xxx", notes = "user details", response = User.class)
そのようなフィールドを除外することができます:
@ApiModelProperty(position = 1, required = true, hidden=true, notes = "used to display user name")