如何处理Ajax和页面调用的异常

时间:2018-09-19 17:49:08

标签: java ajax jsp spring-boot user-interface

我们正在开发Spring Boot UI应用程序,因为它是一个UI应用程序,所以我们将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 :(得分:0)

一种方法是确保请求是可区分的,例如所有“正常页面”请求都以.html结尾,因此它们的错误响应有效负载也应该是HTML页面,例如其他所有请求都将发送带有错误响应的JSON有效负载。

当然,更RESTful的方式将是内容协商,即使是对于错误响应,如果无法协商通用格式,则默认为纯文本。

答案 1 :(得分:0)

我尝试过的以下方法已经成功

  @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;
}
  }