我想包装来自GWT服务器的所有传出异常(仅服务器,客户端上没有任何内容):
public class AuthServiceImpl extends RemoteServiceServlet implements AuthService {
public String loginAttemt(String username, String password) {
AwesomeUser user = AwesomeUserDao.forUsername(username);
if(BCrpyt.checkpw(user.getPasshash(), password)) {
String code = magicallyGenerateErrorCode();
logger.error("Invalid login attempt - error code" + code);
throw new AwesomeException("password", "Invalid username or password", code);
}
}
}
@RemoteServiceRelativePath("auth")
public interface AuthService extends RemoteService {
String loginAttempt(String username, String password) throws AwesomeException;
}
public interface AuthServiceAsync {
void loginAttempt(String username, String password, AsyncCallback<String> callback) throws AwesomeException;
}
现在,这可行。在我的客户端上,我只是做这样的事情(getField(String)出于不相关的原因我做了一些自定义,但这很重要)
public void onFailure(Throwable caught) {
if(caught instanceof AwesomeException) {
AwesomeException a = (AwesomeException)caught;
getField(a.getfield()).setErrorText(a.getText());
getField("error-code").setText(a.getCode());
}
}
是的,这按预期工作。但是,想一想那user是null-你们中的一些人可能已经读到“哦,伙计,如果用户名不存在,他可能在那里有NPE”,您是绝对正确的。而且可以肯定的是,我确实在为这类事情编写代码。但是,我不会抓住所有这些情况。我想在某个地方添加一个异常处理程序,该异常处理程序捕获所有这些异常并将其包装在其中AwesomeException-特别是这样,我可以将相关的错误代码传递给用户,以便他们可以与支持人员联系以解决问题。我不想依靠程序员总是记住每个可能的null和非法参数以及所有其他运行时异常。我当然不希望他们自满,
(错误代码实际上是一个请求ID-每个请求都有一个ID,并且所有日志消息在打印时都会使用该ID-因此,如果它们报告了错误代码,我们可以非常轻松地查看带有该请求的所有日志消息并解决错误)
我尝试跟踪回调,但最终在RPC类中迷路了。但可以肯定的是,我不是第一个尝试拦截服务器发出的GWT异常的人,对吗?
紫衣仙女
慕盖茨4494581
相关分类