1. 程式人生 > >@ModelAttribute 獲取方法引數值中的坑

@ModelAttribute 獲取方法引數值中的坑

通過@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,讓我們一起前進吧!!

前進吧蝸牛