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

經過@ModelAttribute註解在方法參數上,獲取請求中的值,注意所註解的參數是否有無參構造函數。下面思考一個問題,@ModelAttribute所註解的參數究竟是必填仍是非必填。java

public void getTest(@ModelAttribute("test") Byte test){...}

在上面方法中,若是不傳test參數,會報一個錯誤,錯誤提示以下.spring

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的屬性一一注入。ui

其餘方法參數註解

  • @PathVariable 用來獲取請求路徑上的值,經常使用於Restful接口
  • @RequestParam 綁定請求中的參數值,默認是必填的,能夠根據required屬性更改,還可根據defaultValue屬性設置默認值

歡迎關注個人微信公衆號cobs-snail,讓咱們一塊兒前進吧!!code

前進吧蝸牛

相關文章
相關標籤/搜索