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



我们正在开发 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。

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

当然,一种更 RESTful 的方法是内容协商,即使是错误响应,如果没有通用格式可以协商,则可能是纯文本默认值。

以下方式我已经尝试过,并且它起作用了

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

最新更新