私は(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ライブラリのバグですか?
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);
}