I'm using GWT and Resty for my web app.
I need to treat two exceptions as special cases and pass additional information to the client. These previously were handled by the Resty calls onFailure() method, as follows:
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);
}
}
});
To catch and log all exceptions before they get to the client, I've implemented a custom Spring MVC HandlerExceptionResolver as follows:
I have a custom HandlerExceptionResolver for logging controller errors as below:
@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
}
}
When using the HandlerExceptionResolver, only status code 500 gets passed to the client. How do I get the two special cases to be recognized by the onFailure() method?