默认异常处理机制
Spring Boot根据发送请求头中的accept是否包含text/html来分别返回不同的响应信息。当从浏览器地址栏中访问应用接口时,请求头中的accept便会包含text/html信息,产生异常时,Spring Boot通过org.springframework.web.servlet.ModelAndView对象来装载异常信息,并以HTML的格式返回;而当从客户端访问应用接口产生异常时(客户端访问时,请求头中的accept不包含text/html),Spring Boot则以JSON的格式返回异常信息。
自定义异常页面
在src/main/resources/resources/error路径下,添加404.html等常见的HTTP状态码对应名称的异常页面,则会返回自定义页面。但是不会影响客户端返回的信息。
自定义异常处理器
使用@ControllerAdvice和@ExceptionHandler注解:
@ControllerAdvice(assignableTypes = {ExceptionController.class})
@ResponseBody
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)// 拦截所有异常,因为都继承Exception类。
public ResponseEntity<ErrorResponse> exceptionHandler(Exception e) {
if (e instanceof IllegalArgumentException) {
return 异常信息
} else if (e instanceof ResourceNotFoundException) {
return 异常信息
}
return null;
}
}
@ControllerAdvice不加assignableTypes值,作为全局异常处理类,否则就只处理指定类抛出的异常。 @ExceptionHandler(value = Exception.class)注解方法拦截指定异常,返回自定义的异常信息。