@Override
  public boolean preHandle(
      HttpServletRequest request, final HttpServletResponse response, final Object handler)
      throws Exception {

    WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
    asyncManager.setTimeoutHandler(
        new Runnable() {
          @Override
          public void run() {
            try {
              logger.debug("Custom time out handler called");
              response.sendError(
                  503, "Async execution of [" + handler + "] did not complete on time");
            } catch (IOException e) {
              logger.error("Timeout not handled", e);
            }
          }
        });

    logger.debug("Registered custom timeout handler");

    return true;
  }