web-dev-qa-db-ja.com

node.jsのswaggerのnull許容フィールド

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ファイルを取得し、検証ミドルウェアが実行される前にそれを変更する何かを自分で作成する必要がありますか、それとも誰かが提案できる回避策はありますか?

14
RodH257

SwaggerUIはnull許容型をサポートしていません(詳しくは こちら を参照してください)。しかし、私はnull可能プロパティを次のように使用しました:

type: ['string','null']

その後、このプロパティはUIから消えますが、検証は引き続き機能しました。

11
Sergiy

nullableフィールドはOpenAPI(fka Swagger)仕様 v3.0. でサポートされていますが、v2.0ではサポートされていません。 null許容型は次のように定義されます。

# Can be string or null
type: string
nullable: true
16
Nazar Gargol

タイププロパティにnullを追加する代わりに、代わりにデフォルトプロパティを使用できます。

Swagger.jsonプロパティ定義の例:

"due_date": {
  "type": "string",
  "description": "Due date",
  "default": "null"
},

これは有効なSwaggerタイプ定義であり、Swagger UIで期待どおりに表示されます。

4
Noval Parinussa

ヒントとして、私はこれに踏み込んだので:追加したとき

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());
    }

}

その後、すべてが再び正常に見えます。

0
konse