1. 程式人生 > >SSM+Swagger設定引數是否必須時遇到的400或415錯誤

SSM+Swagger設定引數是否必須時遇到的400或415錯誤

大家在做SSM專案時對於設定傳參的必須或非必須這個需求應該是比較常見的,那麼正常的兩種情況應該是:

  1. 對於必須引數應該是不傳會出錯,傳則正常獲取;
  2. 對於非必須引數應該是不傳預設為null(當然也可以修改預設值),傳則正常獲取。

一般設定SSM方法引數可以有:直接引數名字對應,或者使用@RequestParam註解,或者使用@Model註解等多個方式,這裡就不詳細說明了,總之是沒有什麼大問題的。

那麼問題來了,為什麼在我加入Swagger的@ApiParam註解之後,就會出現問題呢:

  1. 對於必須引數來說,設定@ApiParam(required = true)屬性就可以了;效果是不傳會出錯,傳則正常獲取。(沒有出現問題)
  2. 對於非必須引數就有點不對了,在我設定@ApiParam(required = false)或不設定此屬性時;效果卻是不傳會有415錯誤(不支援媒體型別引數),傳則正常獲取。(與期望不符)

這裡先說下我的解決辦法

  1. 對於必須引數來說,需要設定@ApiParam(required = true),以及@RequestParam(required = ture)@RequestParam
  2. 對於非必須引數來說,需要設定@ApiParam@ApiParam(required = false),以及@RequestParam(required = false)

那麼這個小問題出現的原因是什麼呢?嘗試之下認為:

  1. Swagger的@ApiParam註解的required屬性值預設為false
  2. 而Spring的@RequestParam註解的required屬性值預設為true
  3. 這裡應該是Spring的設定會覆蓋Swagger設定。

這樣的話就會出現雖然@ApiParam設定為false,但是spring還是會認為此引數是必須引數,那麼就會導致上面的問題。

【希望能對你的問題有所幫助,支援我的話幫忙點個贊吧!】