gpt4 book ai didi

gwt - StatusCodeException 与GWT 中的运行时异常

转载 作者:行者123 更新时间:2023-12-04 12:24:35 25 4
gpt4 key购买 nike

在我的 GWT 应用程序中。在调用服务方法之前,我覆盖了 RemoteServiceServlet 以检查 session 是否有效。我正在尝试从服务器抛出 RuntimeException("expired session") 并且我希望客户端从 asynccallback onFailure 中捕获此异常...

在客户端,我想:
异步回调:

@Override
public void onFailure(Throwable caught) {
final String message = caught.getMessage();

if (!isNullOrEmptyString(message) && message.contains("expired session")) {
com.google.gwt.user.client.Window.Location.reload();
}

}

但是,在客户端,捕获的对象仍然是 StatusCodeException 并且消息仍然是默认的“...服务器中的异常...”。如何至少覆盖默认消息的异常以比较它是否是我从服务器发送的 session 过期消息?

谢谢

嗨,古瑟尔,
这是我的代码:
-> 自定义 RemoteServiceServlet。我试图在调用每个方法之前“拦截”它。我检查 session 并抛出 RuntimeException 如果它已经过期。所以基本上,抛出异常的不是声明的方法,而是自定义的 RemoteServiceServlet。它仍然转到客户端异步中的“onFailure”,但 Throwable 对象仍然是“StatusCodeException”类型,没有 EXPIRED_SESSION_MSG 消息。不知道如何进行这项工作。谢谢!
public class XRemoteServiceServlet extends RemoteServiceServlet {
private final static String EXPIRED_SESSION_MSG = "ERROR: Application has expired session.";
@Override
protected void onAfterRequestDeserialized(RPCRequest rpcRequest) {
HttpServletRequest httpServletRequest = this.getThreadLocalRequest();
HttpSession session = httpServletRequest.getSession(false);
if (session != null) {
final String sessionIdFromRequestHeader = getSessionIdFromHeader();
if (!isNullOrEmptyString(sessionIdFromRequestHeader)) {
final String sessionId = session.getId();

if (!sessionId.equals(sessionIdFromRequestHeader)) {
throw new RuntimeException(EXPIRED_SESSION_MSG);
}
}

最佳答案

全部 RuntimeExceptions gwt 应用程序的服务器端抛出的已被包装为 StatusCodeException如果您没有在远程方法声明中声明它们。

编辑:

之后,Thomas Broyer 发表评论,我了解到在远程方法声明中声明的所有异常(已检查或未检查)都会传播到 gwt 客户端。因此,您所要做的就是声明您的远程方法,例如:

public void myRemoteMethod() throws RuntimeException;

关于gwt - StatusCodeException 与GWT 中的运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6248727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com