Как обрабатывать исключения как для ajax, так и для вызова страницы - PullRequest
0 голосов
/ 19 сентября 2018

Мы работаем над приложением с весенней загрузкой, поскольку это приложение с пользовательским интерфейсом, для некоторых операций мы используем ajax-вызовы, а также обычные вызовы страниц (просто вызывая url отображения запроса).Здесь проблема заключается в том, что при выполнении вызова ajax и обычного вызова страницы, если он перехватывается исключением того же типа, как обрабатывать это, скажем, DataAccessException

    @ExceptionHandler(DataAccessException.class)
        public ModelAndView handleError(HttpServletRequest req, Exception ex) {
    logger.error("Request: " + req.getRequestURL() + " raised " + ex);

    ModelAndView mav = new ModelAndView();
    mav.addObject("exception", ex);
    mav.addObject("url", req.getRequestURL());
    mav.setViewName("error");
    return mav;
  }

Это исключение доступа к данным должно обслуживаться дляи ajax-запрос, и обычные вызовы страницы, но ajax-ответ не должен быть ModelAndView.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

следующим образом я попробовал, и это сработало

  @ExceptionHandler(DataAccessException.class)
        public Object handleError(HttpServletRequest req, DataAccessException ex) {
    logger.error("Request: " + req.getRequestURL() + " raised " + ex);
if("XMLHttpRequest".equals(request.getHeader("X-Requested-With")))
        {       
        ResponseEntity<String> dataExceptionRes=null;
dataExceptionRes=new ResponseEntity<String>(HttpStatus.FORBIDDEN);
return dataExceptionRes;
}
else{
    ModelAndView mav = new ModelAndView();
    mav.addObject("exception", ex);
    mav.addObject("url", req.getRequestURL());
    mav.setViewName("error");
    return mav;
}
  }
0 голосов
/ 19 сентября 2018

Один из способов - обеспечить различимость запросов, например, все запросы «обычной страницы» заканчиваются на .html, поэтому их полезная нагрузка ответа об ошибке также должна быть HTML-страницей, в то время как, например, все другие запросы будут отправлять полезную нагрузку JSON сответ об ошибке.

Конечно, более RESTful-способ - это использование содержимого, даже для ответов об ошибках, с простым текстовым значением по умолчанию, если общий формат не может быть согласован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...