2017-04-10 36 views
3

在我的Spring MVC控制器我有這樣的方法:避免NumberFormatException的

public String myMethod(@RequestParam(defaultValue="0") int param) { ... } 

當我傳遞一個字符串作爲我param我顯然得到一個NumberFormatException的值:

未能將類型'java.lang.String'的值轉換爲所需的類型'int';嵌套的例外是java.lang.NumberFormatException:對於輸入字符串:「測試」

是十分明顯......

所以我試圖找到一種方法,用戶重定向到一個默認的頁面時,這個錯誤正在發生。有沒有一種常見的方法來實現這一點?

在我考慮到位的int的使用String映射我param的那一刻,是否這是可解析到int,然後切換到適當的邏輯,但是這似乎是一個解決辦法,而不是解決方案。 ..

有沒有更好的方法來處理這個問題,並保持我的param正確的類型綁定?

+2

您可以創建一個@ControllerAdvice類,可以處理異常,如NumberFormatException異常,而從你的方法拋出該異常,併發送用戶到一個專門的錯誤消息 – DamCx

+0

@DamCx好的,但我只需要在這種情況下重定向,而不是所有的'NumberFormatException'拋出我的應用程序 – davioooh

+0

然後,創建一個特定的異常拋出的情況下,但你必須檢查因爲它在你我thod,因爲@ControllerAdvice類將無法區別。 我真的不確定SpringMVC如何處理異常,如果它們沒有被你的方法明確拋出 – DamCx

回答

0

我終於解決了添加CustomNumberEditor這樣的:

@InitBinder 
public void registerNumbersBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(Integer.class, new CustomNumberEditor(Integer.class, true){ 
     @Override 
     public void setAsText(String text) throws IllegalArgumentException { 
      try{ 
       super.setAsText(text); 
      }catch (IllegalArgumentException ex){ 
       setValue(0); 
      } 
     } 
    }); 
}