本文主要介绍如何使用 Spring Boot 2.x 配置全局的异常处理器。具体的步骤如下:
步骤一:新建异常处理器
首先,我们需要新建一个异常处理器类 GlobalExceptionHandler
,该类需要实现 ErrorController
接口和 @RestControllerAdvice
注解。代码如下:
@RestControllerAdvice
public class GlobalExceptionHandler implements ErrorController {
@Override
public String getErrorPath() {
return "/error";
}
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleException(Exception ex) {
// 自定义返回格式的逻辑
return new ResponseEntity<>("System error", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
在上面的代码中,我们使用了 @RestControllerAdvice
注解,该注解可以让 Spring 识别该类为全局异常处理器。在 handleException
方法中,我们可以针对不同的异常类型处理不同的逻辑。在这里,我们简单地返回了一个 "System error" 字符串,同时返回状态码 500
。
步骤二:配置异常处理器
接下来,我们需要将异常处理器注册到 Spring 中。可以使用 @ControllerAdvice
注解或 WebMvcConfigurer
接口完成。
在 ControllerAdvice
注解中,可以指定需要扫描的包,示例代码如下:
@RestControllerAdvice(basePackages = "com.example")
public class GlobalExceptionHandler { … }
在 WebMvcConfigurer
接口中,可以覆盖 extendHandlerExceptionResolvers
方法,该方法将用于注册全局异常处理器。示例代码如下:
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Autowired
private GlobalExceptionHandler globalExceptionHandler;
@Override
public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
resolvers.add(globalExceptionHandler);
}
}
示例一:处理自定义异常
在实际的开发中,我们通常不会将所有的异常都处理成相同的格式。下面是处理自定义异常的示例代码。
首先,我们需要新建一个自定义异常类,并指定异常响应格式。代码如下:
public class BusinessException extends RuntimeException {
private String errCode;
private String errMsg;
public BusinessException(String errCode, String errMsg) {
super(errMsg);
this.errCode = errCode;
this.errMsg = errMsg;
}
// getter and setter
}
接下来,我们在全局异常处理器中添加处理自定义异常的逻辑:
@ExceptionHandler(BusinessException.class)
public ResponseEntity<Object> handleBusinessException(BusinessException ex) {
return new ResponseEntity<>(new BusinessExceptionResponse(ex.getErrCode(), ex.getErrMsg()), HttpStatus.BAD_REQUEST);
}
在 handleBusinessException
方法中,我们返回了一个 BusinessExceptionResponse
对象,该对象包含了自定义异常的响应格式。最后,我们需要在自定义异常中添加 getter 和 setter 方法。
示例二:处理 Web 服务器异常
在 Web 应用中,很多时候都会出现 Web 服务器异常,例如 404、500 等状态码。下面是处理 Web 服务器异常的示例代码。
首先,我们需要在全局异常处理器中添加处理 Web 服务器异常的逻辑:
@ExceptionHandler(value = { NoHandlerFoundException.class, HttpRequestMethodNotSupportedException.class })
public ResponseEntity<Object> handleWebServerException(Exception ex, HttpServletRequest request) {
HttpStatus status = getStatus(request);
return new ResponseEntity<>("Web server error", status);
}
private HttpStatus getStatus(HttpServletRequest request) {
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
if (statusCode == null) {
return HttpStatus.INTERNAL_SERVER_ERROR;
}
return HttpStatus.valueOf(statusCode);
}
在上面的代码中,我们使用了两个异常类型 NoHandlerFoundException
and HttpRequestMethodNotSupportedException
,分别用于处理 404 和 405 异常。在 handleWebServerException
方法中,我们返回了一个 "Web server error" 字符串,同时返回对应状态码,该状态码通过 getStatus
方法获取。
至此,全局捕获异常的操作已经完整地讲述了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springBoot2.X配置全局捕获异常的操作 - Python技术站