SpringBoot配置全局的异常捕获 - 同时兼容web与ajax,面试必备知识点
在Spring Boot中,可以通过@ControllerAdvice注解创建一个全局异常处理类,同时兼容处理web请求和AJAX请求。以下是一个简单的示例:
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpStatus;
@ControllerAdvice
public class GlobalExceptionHandler {
// 处理所有Exception异常
@ExceptionHandler(Exception.class)
public Object handleException(Exception e) {
// 如果是AJAX请求则返回JSON格式的错误信息,否则返回错误视图
if (isAjaxRequest()) {
// 返回JSON格式的错误信息
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("{\"message\": \"" + e.getMessage() + "\"}");
} else {
// 返回错误视图,例如ModelAndView
// ModelAndView modelAndView = new ModelAndView("error");
// modelAndView.addObject("errorMessage", e.getMessage());
// return modelAndView;
return "error"; // 返回错误视图的名称
}
}
// 检查当前请求是否为AJAX请求
private boolean isAjaxRequest() {
String requestType = request.getHeader("X-Requested-With");
return "XMLHttpRequest".equals(requestType);
}
}
在上述代码中,handleException
方法会捕获所有的Exception类型的异常。如果检测到是AJAX请求,则返回一个JSON格式的错误信息;如果不是AJAX请求,则返回一个错误视图。这样就可以同时兼容处理web请求和AJAX请求的全局异常处理。
评论已关闭