针对“SpringBoot实现全局异常处理方法总结”的完整攻略,我可以给出以下详细说明:
1. 异常处理简述
在 Spring Boot 应用中,当出现异常时,可以通过全局异常处理机制统一处理异常信息,避免异常信息直接传递到客户端,保证了系统的安全性和可靠性。
2. 实现全局异常处理
2.1 创建全局异常处理类
在 Spring Boot 项目中,我们可以通过实现 ErrorController 或者使用 @ControllerAdvice 注解来实现全局异常处理。
2.1.1 实现 ErrorController
实现 ErrorController 类,可以处理客户端请求不存在的情况。示例代码如下:
@Controller
public class GlobalErrorController implements ErrorController {
private static final String ERROR_PATH = "/error";
@RequestMapping(ERROR_PATH)
public String handleError(HttpServletRequest request) {
Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
if (status != null) {
int statusCode = Integer.parseInt(status.toString());
if (statusCode == HttpStatus.NOT_FOUND.value()) {
return "404页面"; // 找不到页面
} else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
return "500页面"; // 服务器出错
}
}
return "error";
}
@Override
public String getErrorPath() {
return ERROR_PATH;
}
}
2.1.2 使用 @ControllerAdvice 注解
使用 @ControllerAdvice 注解可以在 Spring Boot 的 MVC 中实现全局异常处理,并自定义处理异常信息。示例代码如下:
@ControllerAdvice
public class GlobalExceptionAdvice {
@ExceptionHandler(value = RuntimeException.class)
@ResponseBody
public ResponseData handleRuntimeException(Exception e) {
return ResponseData.fail(e.getMessage());
}
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResponseData handleException(Exception e) {
return ResponseData.fail(e.getMessage());
}
}
3. 示例说明
3.1 示例一:使用 @ControllerAdvice 注解
我们可以使用上述 2.1.2 中提供的全局异常处理方式。以异常信息返回 JSON 数据为例,我们可以编写以下代码:
@ControllerAdvice
public class GlobalExceptionAdvice {
@ExceptionHandler(value = RuntimeException.class)
@ResponseBody
public ResponseData handleRuntimeException(Exception e) {
return ResponseData.fail(e.getMessage());
}
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResponseData handleException(Exception e) {
return ResponseData.fail(e.getMessage());
}
}
在 ResponseData 类中,我们可以自定义返回的 JSON 格式:
public class ResponseData {
private Integer status;
private String message;
private Object data;
public static ResponseData ok() {
ResponseData responseData = new ResponseData();
responseData.setStatus(200);
responseData.setMessage("成功!");
return responseData;
}
public static ResponseData ok(Object data) {
ResponseData responseData = new ResponseData();
responseData.setStatus(200);
responseData.setMessage("成功!");
responseData.setData(data);
return responseData;
}
public static ResponseData fail(String message) {
ResponseData responseData = new ResponseData();
responseData.setStatus(500);
responseData.setMessage(message);
return responseData;
}
// 省略 getter 和 setter 方法
}
以上代码可以统一处理所有异常,并以自定义格式返回 JSON 数据给客户端。
3.2 示例二:实现 ErrorController
我们可以使用上述 2.1.1 中提供的全局异常处理方式。以对 404 和 500 异常信息的处理为例,我们可以编写以下代码:
@Controller
public class GlobalErrorController implements ErrorController {
private static final String ERROR_PATH = "/error";
@RequestMapping(ERROR_PATH)
public String handleError(HttpServletRequest request) {
Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
if (status != null) {
int statusCode = Integer.parseInt(status.toString());
if (statusCode == HttpStatus.NOT_FOUND.value()) {
return "404页面"; // 找不到页面
} else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
return "500页面"; // 服务器出错
}
}
return "error";
}
@Override
public String getErrorPath() {
return ERROR_PATH;
}
}
以上代码在项目中统一处理了 404 和 500 异常,分别跳转对应的错误页面。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot实现全局异常处理方法总结 - Python技术站