Spring MVC:处理Ajax请求和正常请求异常的最佳方法是什么?

Roc*_* Hu 5 java ajax spring spring-mvc

我想在我的项目中定义一个常见的异常管理器,所以我使用@ControllerAdvice来做,代码片段如下:

@ExceptionHandler(Exception.class)
public ModelAndView handleAllException(HttpServletRequest request, Exception ex) throws Exception
{
    LOGGER.error(ex.getMessage());

    ModelAndView mav = new ModelAndView();
    mav.addObject("exception", ex);
    mav.addObject("url", request.getRequestURL());
    mav.setViewName(ViewConstants.INTERNAL_ERROR_VIEW);
    return mav;
}
Run Code Online (Sandbox Code Playgroud)

它将返回一个常见的错误页面.这对于正常的请求异常非常有用.但如果这是一个Ajax请求,结果是如此丑陋.所以我添加代码来判断它.添加的代码如下:

if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
        // return HTTP Status code and response message
    } else {
        // return error page name
    }
Run Code Online (Sandbox Code Playgroud)

我不认为这是最好的方式,任何人都有好的意见?

Sta*_*tan 0

我建议对任何请求设置错误响应代码,认为这是一个很好的做法,可以通知客户端出现问题,而不取决于请求的类型。对于 ajax 请求,您可以返回同一页面并通过错误代码识别问题。