@ModelAttribute 獲取方法引數值中的坑
阿新 • • 發佈:2019-01-09
通過@ModelAttribute
註解在方法引數上,獲取請求中的值,注意所註解的引數是否有無參建構函式。下面思考一個問題,@ModelAttribute
所註解的引數到底是必填還是非必填。
public void getTest(@ModelAttribute("test") Byte test){...}
在上面方法中,如果不傳test引數,會報一個錯誤,錯誤提示如下.
Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.lang.Byte]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.lang.Byte.<init>()
但如果引數型別Byte改成String型別或者其他bean的時候就沒有這個問題就不會報錯。檢視程式碼是因為沒有找到對應型別的無參建構函式,所以一般基礎數字物件型別都會報錯,比如Long型等。
總結
@ModelAttribute註解在方法引數上時,如果引數型別沒有無參建構函式,那這個引數是必填的,當有無參構成函式,引數是非必填的。在java 基本物件型別中,@ModelAttribute一定要指明引數名,當引數型別是一個bean的時候,它可以按照bean的屬性一一注入。
其他方法引數註解
- @PathVariable 用來獲取請求路徑上的值,常用於Restful介面
- @RequestParam 繫結請求中的引數值,預設是必填的,可以根據required屬性更改,還可根據defaultValue屬性設定預設值
如有什麼不對的地方,歡迎大家指出來,我們共同學習!!
歡迎關注我的微信公眾號cobs-snail,讓我們一起前進吧!!