Node.JSでSwaggerドキュメントを作成するためのソリューションを見つけるために、私は多くの時間を費やしました。メインライブラリはswagger-nodeです。このライブラリでは、swagger yamlファイルを作成し、それにコントローラーを追加します。アプリにSwagger uiドキュメントを自動的に提供し、yamlで指定したモデルに対してリクエストとレスポンスを検証します。
これはきちんとしていますが、null
を値として明示的に返すまたは受け入れることができるようにしたいフィールドがいくつかあるという要件があります。次に例を示します。
{
id: 123,
description: "string",
date_sent: null
}
date_sent
キーを削除したくありません。明示的にnullとして宣言したいと思います。
Swagger仕様はanyOf
をサポートしていません。これはJSONスキーマが通常これを行う方法であると私は信じています。
回避策はありますか?おそらく、追加可能なx-nullable
ベンダー固有フラグを持つノードで使用可能なライブラリー、または不要なフィールドをすべてnullにできるように指定するいくつかの方法があります。
私は自分のswaggerファイルを取得し、検証ミドルウェアが実行される前にそれを変更する何かを自分で作成する必要がありますか、それとも誰かが提案できる回避策はありますか?
SwaggerUIはnull許容型をサポートしていません(詳しくは こちら を参照してください)。しかし、私はnull可能プロパティを次のように使用しました:
type: ['string','null']
その後、このプロパティはUIから消えますが、検証は引き続き機能しました。
nullable
フィールドはOpenAPI(fka Swagger)仕様 v3.0. でサポートされていますが、v2.0ではサポートされていません。 null許容型は次のように定義されます。
# Can be string or null
type: string
nullable: true
タイププロパティにnullを追加する代わりに、代わりにデフォルトプロパティを使用できます。
Swagger.jsonプロパティ定義の例:
"due_date": {
"type": "string",
"description": "Due date",
"default": "null"
},
これは有効なSwaggerタイプ定義であり、Swagger UIで期待どおりに表示されます。
ヒントとして、私はこれに踏み込んだので:追加したとき
type: string
nullable: true`
回答で説明されているように https://stackoverflow.com/a/42797352/275056 私のサービスは実際の値ではなく"fieldName": { "present": true }
のみを返しました!
これが表示された場合、たとえばSpringを使用している場合は、JsonNullableModule
をJacksonシリアライザーに追加するだけです。
@Component
public class JacksonConfiguration {
@Autowired
public void configureJackson(ObjectMapper mapper) {
mapper.registerModule(new JsonNullableModule());
}
}
その後、すべてが再び正常に見えます。