SSM+Swagger設定引數是否必須時遇到的400或415錯誤
阿新 • • 發佈:2018-12-13
大家在做SSM專案時對於設定傳參的必須或非必須這個需求應該是比較常見的,那麼正常的兩種情況應該是:
- 對於必須引數應該是不傳會出錯,傳則正常獲取;
- 對於非必須引數應該是不傳預設為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設定。
這樣的話就會出現雖然@ApiParam
設定為false
,但是spring還是會認為此引數是必須引數,那麼就會導致上面的問題。