web-dev-qa-db-ja.com

Swaggerドキュメントの@ApiModelProperty dataTypeを文字列に設定する方法

私は(Spring Boot経由で)Spring MVCを使用していて、swagger-spring-mvcライブラリを使用してSwagger APIドキュメントを統合しています。

次のようなクラスがあります。

@ApiModel
public class CartItem {
    ...
    private Money listPrice; // joda money class

    @JsonSerialize(using = ToStringSerializer.class)
    @ApiModelProperty(required = true, dataType = "Java.lang.String")
    public Money getListPrice() {
        return listPrice;
    }
    ...
}

このフィールドにToStringSerializerを使用しているので、JSONでlistPrice.toStringを返します。つまり、

{
    "listPrice": "USD 10.50"
}

ただし、swaggerのドキュメントでは、dataType = "Java.lang.String"を順守していません。応答モデルは次のように表示されます。

"CartItem": {
    "description": "",
    "id": "CartItem",
    "properties": {
        "listPrice": {
            "required": false,
            "type": "Money"
        }
    }
}

@ApiModelPropertyアノテーションをメソッドと同様にフィールドに配置しようとしましたが、どちらの場合もrequiredフィールドは考慮されますが、dataTypeフィールドは無視されます。また、dataTypeに「String」、「string」、「Java.lang.String」を使用してみましたが、どれも機能しませんでした。

何かが足りないのですか、それともswagger-spring-mvcライブラリのバグですか?

14
nerdherd

Swagger Spring MVCライブラリの現在のバージョンでは、dataTypeが完全に無視されていることがわかります。私はそれについてここで短い議論を見つけました:

https://github.com/springfox/springfox/issues/602

いったんリリースされると、バージョン2に含めることができるようです。

編集:バージョン2はdataTypeをサポートしていると言っていますが、現時点では機能していないようです。私のニーズに対するより良いアプローチは、次のような直接のモデル置換でドキュメント設定を構成することです:

@Bean
public Docket swaggerSpringMvcPlugin() {
    return new Docket(DocumentationType.SWAGGER_2)
            .directModelSubstitute(Money.class, String.class);
}
13
nerdherd