SSM+Swagger設定パラメータが必要かどうかで発生した400または415エラー


SSMプロジェクトを行う際に、パラメータを設定する必要があるか、必要でないかというニーズはよくあるはずですが、通常の2つの状況は次のようになります.
  • 必須パラメータは送信しないとエラーが発生し、送信は正常に取得されるべきである.
  • は、必須でないパラメータに対してnullとしてデフォルトを送信しないべきであり(もちろんデフォルト値を変更することもできる)、送信は正常に取得される.

  • 一般的にSSMメソッドパラメータを設定するには,直接パラメータ名対応,あるいは@RequestParam注釈,あるいは@Model注釈など複数の方式があり,ここでは詳しく説明しないが,いずれにしても大きな問題はない.
    では、なぜ私がSwaggerの@ApiParam注釈を入れた後、問題が発生したのでしょうか.
  • 必須パラメータについては、@ApiParam(required = true)属性を設定すればよい.効果はパスしないとエラーになり、パスは正常に取得されます.(問題なし)
  • は必須でないパラメータに対して少し間違っています.私が@ApiParam(required = false)を設定したり、この属性を設定しなかったりしたとき.効果は415エラー(メディアタイプパラメータはサポートされていません)が発生し、正常に取得されます.(期待と一致しません)
  • ここで私の解決策を説明します.
  • 必須パラメータについては、@ApiParam(required = true)、および@RequestParam(required = ture)または@RequestParamを設定する必要がある.
  • 非必須パラメータの場合、@ApiParamまたは@ApiParam(required = false)、および@RequestParam(required = false)を設定する必要がある.

  • では、この小さな問題が発生した原因は何なのでしょうか.次のように考えます.
  • Swaggerの@ApiParam注記のrequired属性値のデフォルト値はfalseです.
  • 、Springの@RequestParam注記のrequired属性値は、デフォルトではtrueです.
  • ここでSpringの設定がSwagger設定を上書きするはずです.

  • そうすると@ApiParamfalseに設定されていますがspringはこのパラメータが必須パラメータであると判断し、上記の問題を引き起こします.
    あなたの问题に役に立つことを望んで、私を支持するなら少し助けてあげましょう!