2015-11-17 69 views
1

假設我的表單字段映射爲整數,短整型等,並且輸入無效(非數字)。如何在Spring MVC中捕獲/處理類型綁定錯誤

我得到了我的錯誤以下映射在表單提交:

Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Short' for property 'property'; nested exception is java.lang.NumberFormatException: For input string: "a" 

我需要顯示自定義的,用戶友好的消息。這不工作對我來說,它永遠不會來到這裏:

@ExceptionHandler(NumberFormatException.class) 
public String handleNumberConversion(NumberFormatException nfe) 
{ 
    return "error.invalidNumberFormat"; 
} 

的BindException無法正常工作或 - 在方法簽名其實連一個通用的異常將不會被激活。

編輯:第二嘗試:我甚至想這一點,這並不在我的資源包工作,要麼,要麼:

# SpringMVC Error Overrides 
typeMismatch.java.lang.NumberFormatException=A NumberFormatException occurred. 
typeMismatch.java.lang.Short={0} is an invalid value. 
typeMismatch.java.lang.Integer={0} is an invalid value. 

此外,我需要從綁定過程中的異常得到一些細節,如正在綁定的字段和當前值,因爲我的自定義錯誤消息顯示此信息。

+0

以及異常處理程序可以在全局或每個控制器分配,您使用的其中兩個的。另外如果你可以發佈你的spring配置來檢查註釋掃描器是否正在設置。 – AntJavaDev

+0

是的,我正在使用,並且還有。所有其他註釋的工作和獲得。 –

+0

並且您已將ExceptionHandler方法放入引發異常的控制器中? – AntJavaDev

回答

1

你的處理方法需要不同的簽名:

@ExceptionHandler(BindException.class) 
public String handleBindException(BindException be) { 
    // extract data from exception... 
    return "whatever"; 
} 
+2

沒有工作。事實上,即使一個@ExceptionHandler(Exception.class)一般也不會被達到。標準消息被顯示。 –

+0

@gene b。你有什麼類型的SimpleMappingExceptionResolver在應用程序中指定? – NikolaB

+0

不,我不知道。但我想我知道問題是什麼:我的頁面處理程序需要一個BindingResult參數。根據此線程,BindingResult參數將防止拋出任何BindExceptions:http://stackoverflow.com/a/22025320/1005607 –