我試圖編寫一個代碼,該代碼將捕獲由ServiceImpl
引發的PhoneNumberInUseException
,但下面的代碼始終適用於else
語句。使用GWT處理自定義異常
@Override
public void onFailure(Throwable caught) {
Window.alert("Failed create account.");
if (caught instanceof PhoneNumberInUseException) {
Window.alert("Sorry, but the phone number is already used.");
} else {
Window.alert(caught.toString());
}
}
的PhoneNumberInUseException extends RuntimeException
現在我只是顯示這個通過Window.alert,但是我會做客戶端邏輯處理異常,這就是爲什麼我不能簡單地用IllegalArgumentException
這可以很好地將異常字符串從服務器傳遞到客戶端。
我錯過了什麼嗎?
實際上,你可能正好保持你的代碼,因爲它並且只是聲明你的RPC方法拋出了這個異常:'public void doSomething(Object someObject)throws PhoneNumberInUseException;'。如果GWT通過'throws'顯式聲明,那麼GWT只會將'RuntimeException'傳播給客戶端。 –
@ChrisCashwell我看到,我使用RuntimeException的原因是因爲我需要在if-else語句內引發異常,而如果從Exception擴展,我得到語法錯誤。 – xybrek
更新了我的答案。 –