Resty-GWT and HandlerExceptionResolver: How do I deal with special cases?

516 Views Asked by At

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?

0

There are 0 best solutions below