我正在尝试制作将捕获PhoneNumberInUseException
抛出的ServiceImpl
的代码,但是,下面的代码总是用于else
语句。
@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
的原因,它可以很好地将异常字符串从服务器传递到客户端。我想念什么吗?
最佳答案
如果您的PhoneNumberInUseException
类看起来像这样:
public class PhoneNumberInUseException extends RuntimeException {
public PhoneNumberInUseException() {
super();
}
}
并且您将其像这样扔在服务中:
throw new PhoneNumberInUseException();
那么您的代码应该正确触发。也就是说,当然,假设您的服务已声明它抛出
PhoneNumberInUseException
,如下所示:public interface SomeService extends RemoteService {
void doSomething(Object someObject) throws PhoneNumberInUseException;
}
public interface SomeServiceAsync {
void doSomething(Object someObject, AsyncCallback callback);
}
public class SomeServiceImpl extends RemoteServiceServlet implements SomService {
public void doSomething(Object someObject) throws PhoneNumberInUseException {
if(somethingHappened) {
throw new PhoneNumberInUseException();
} else {
doSomethingCool();
}
}
}
如果在确保一切都可以正常工作之后,您可能想要在断点上放置一个断点
if (caught instanceof PhoneNumberInUseException)
并找出
caught
的类别。如果不是PhoneNumberInUseException
,则可能不是read the documentation很好。