2017-09-07 8 views
2

私はSpringでエンドポイントを定義し、単一のApiParamをオプションとして定義しました。私は?id=xxxパラメータなしでURLを記述する際にオプションのクエリが含まれていない場合、Swaggerは400エラーをスローします。

@RequestMapping(value = "/searchResult/getList", method = RequestMethod.GET) 
@ApiOperation(value = "populate list") 
public JasonMessage getList(@ApiParam(name="id", value = "id", required = false) 
          @RequestParam Integer id) { 

はしかし、私は不正な形式のURLエラーで期待する400エラーを取得します。

これはなぜですか?私はそれをrequired = falseと定義しましたが、パス変数ではありませんが、少なくとも空のクエリパラメータを含めることなくURLを書く方法はありません(?id=など)。

私はURLのための真に選択的なパラメータは何か混乱していますか、それはぐっすりした問題、春の問題、または私がどこかで作った間違いです。

レスポンスボディはno contentで、レスポンスコードはちょうど400です。

答えて

2

注釈を@RequestParam(required = false)に変更する必要があります。必須フィールドのデフォルトはtrueです。さらに、@ApiParamrequiredを削除することができます。これは、swaggerがSpringsの注釈から検出するためです。

スワッガーアノテーションは、APIに関する追加情報であり、エンドポイント(APIの生成ページ外)の機能には影響しません。

さらに、@RequestParamアノテーションにリクエストパラメータの名前を入れる必要があります。これは、スワッガーアノテーションがスプリングの動作に影響を与えないためです。

あなたの最終的なコードは

@RequestMapping(value = "/searchResult/getList", method = RequestMethod.GET) 
@ApiOperation(value = "populate list") 
public JasonMessage getList(@ApiParam 
          @RequestParam(value = "id", required = false) Integer id) { 
+0

あなた美しい人をお読みください。それはまさにそれです!それは非常に意味をなさない。答えをありがとう! – JDGale8

+0

@ JDGale8ようこそ! Swagger + Springで作業するときは、Springアノテーションだけを行い、エンドポイントを装飾または修正するためにSwaggerアノテーションを追加することをお勧めします。スワッガーはスプリングアノテーションからの動作を取得するのに非常に優れています。たとえば、Swaggerがそのエンドポイントの原因から '@ ApiParam'アノテーションをすべて削除することができます。 (そうでないと設定されていない限り) –

関連する問題