Web アプリに GWT と Resty を使用しています。
2 つの例外を特別なケースとして扱い、追加情報をクライアントに渡す必要があります。これらは以前は、次のように Resty 呼び出しの onFailure() メソッドによって処理されていました。
getClientFactory().getRequest().restyMethod(id,
new MethodRecipient<DataDTO>() {
@Override
public void onSuccess(Method method, DataDTO response) {
// do stuff
}
@Override
public void onFailure(Method method, Throwable ex) {
if (ex.getMessage().endsWith("exception message 1")) {
getClientFactory().getAppController().showRestFatalError("Message 1", "Title 1", errorMsg);
} else if (ex.getMessage().endsWith("exception message 2")) {
getClientFactory().getAppController().showRestFatalError("Message 2", "Title 2", errorMsg);
} else {
// else fall back to a friendly but vague "something else went wrong"
getClientFactory().getAppController().showRestFatalError("Unexpected error", "Unexpected Error", errorMsg);
}
}
});
クライアントに到達する前にすべての例外をキャッチしてログに記録するために、次のようにカスタム Spring MVC HandlerExceptionResolver を実装しました。
以下のように、コントローラーエラーをログに記録するためのカスタム HandlerExceptionResolver があります。
@Component
public class LoggingHandlerExceptionResolver extends AbstractHandlerExceptionResolver {
private final Logger logger = LoggerFactory.getLogger(LoggingHandlerExceptionResolver.class);
@Override
public ModelAndView doResolveException(HttpServletRequest aReq, HttpServletResponse aRes, Object aHandler, Exception ex) {
logger.error("Server exception thrown", ex);
return null; // trigger other HandlerExceptionResolvers
}
}
HandlerExceptionResolver を使用すると、ステータス コード 500 のみがクライアントに渡されます。onFailure() メソッドによって認識される 2 つの特殊なケースを取得するにはどうすればよいですか?