1

我正在使用Spring 3.0 MVC構建Web應用程序。Spring MVC-當ModelAttribute的int值爲空時拋出異常

我有一個方法,其原型如下。

@RequestMapping(value = "/blahblah/blah.do", method=RequestMethod.GET) 
public void searchData(@RequestParam(value="uniqOid", required=false) String uniqOid, @ModelAttribute("MasterVo") MasterVo searchVo, 
      ModelMap model, HttpServletResponse response, HttpServletRequest request) 

的問題是,視圖(JSP)中包含的匹配searchVo(ModelAttribute)input秒。 當int或long值searchVo沒有來自jsp時,服務器會拋出404頁未找到異常。

如果值的類型是「字符串」,卻沒有這個問題。

在我看來,這是類型鑄造的問題。

我怎麼能解決這個問題,那我要檢查服務器代碼的哪一部分?

在此先感謝。

+0

您可以添加一些JSP代碼和'searchData'方法體。此外,您的方法參數的末尾不是代碼格式。 – DairyLea

+1

發佈您的堆棧跟蹤,以及包含有問題的字段的「MasterVo」部分。 –

回答

3

我會繼續前進,並承擔一些關於您的問題的事情。

這不是一個type-cast問題。 Spring有默認轉換器,可以很容易地從String轉換爲某種原始類型。

現在你面對的是我認爲null assigment to primitive type問題。假設導致問題的property的名稱被命名爲primitiveProperty。現在,請求參數可以包含一個名稱爲primitiveProperty的參數,其中包含一個空字符串值或一些不能轉換爲數字的值。如果primitiveProperty的類型是字符串,則可以毫無問題地將該參數的值賦給它。

如果primitiveProperty的類型是intlong或可以不具有null值其他原語類型,會出現問題。當春天轉換爲空字符串或命名primitiveProperty非數字的字符串值的請求PARAM,它不能這樣做,因爲該字符串不能轉換爲有效的intlong值。所以它被轉換爲null。現在,當Spring試圖將該空值賦給一個不具有null值(任何原始類型)的屬性時,您會得到一個Exception。如果您的請求參數爲空字符串,則可以用等效的wrapper classintInteger,longLong等)替換域對象中的麻煩屬性。如果您從視圖中獲取非數字值,那麼請確保您沒有獲得非數字值。

+0

非常感謝Bhashit Parikh。 我通過改變像int,long,float到Integer,Long,Float這樣的基本類型來解決這個問題。 再次感謝。 –

+0

良好的答案和解釋...它節省了我的時間..thanku – Miller

0

您需要檢查提供類型轉換問題的字段的設置程序,您的情況爲MasterVo

彈簧將調用setter方法的價值,在那裏我相信你會看到錯誤來綁定。 只需將調試點添加到此setter中,您將看到問題。

+0

非常感謝hellojava。 我通過改變像int,long,float到Integer,Long,Float這樣的基本類型來解決這個問題。 再次感謝。 –

相關問題