Spring boot Rest 以空主体响应除我的 @ControllerAdvice 中覆盖的异常之外的异常

作者:编程家 分类: spring 时间:2025-10-15

使用Spring Boot开发RESTful API,我们经常需要处理各种异常情况。在一些特殊情况下,我们可能需要以空主体响应除了我们自定义的异常之外的其他异常。在这种情况下,我们可以使用@ControllerAdvice来处理这些异常,并为它们提供自定义的响应。

什么是@ControllerAdvice

@ControllerAdvice是Spring框架提供的一个注解,用于统一处理控制器中抛出的异常。通过在@ControllerAdvice中定义的异常处理方法,我们可以为不同的异常提供自定义的响应。

在我们的示例中,我们将演示如何使用@ControllerAdvice来处理除了我们自定义的异常之外的其他异常,并以空主体的形式进行响应。

创建自定义异常

首先,我们需要创建一个自定义异常类,用于处理特定的异常情况。例如,我们可以创建一个自定义异常类EmptyResponseException来处理需要以空主体响应的异常。

java

public class EmptyResponseException extends RuntimeException {

// 自定义异常的具体实现

}

创建异常处理类

接下来,我们需要创建一个异常处理类,用于处理除了我们自定义的异常之外的其他异常。我们可以使用@ControllerAdvice注解来标记这个类。

java

@ControllerAdvice

public class GlobalExceptionHandler {

// 处理除自定义异常外的其他异常

@ExceptionHandler(Exception.class)

@ResponseStatus(HttpStatus.OK)

@ResponseBody

public ResponseEntity handleException(Exception ex) {

// 返回空主体的响应

return new ResponseEntity<>(null, HttpStatus.OK);

}

}

在上面的代码中,我们使用@ExceptionHandler注解来指定要处理的异常类型,这里我们处理的是所有的Exception异常。然后,我们使用@ResponseStatus注解来指定响应的HTTP状态码,这里我们使用了OK状态码。最后,我们使用@ResponseBody注解来将返回值作为响应主体返回。

自定义异常处理优先级

在上述代码中,我们处理了所有的Exception异常,并以空主体进行响应。但是,如果我们在@ControllerAdvice中定义了其他异常处理方法,那么这些方法将会覆盖上述处理所有异常的方法。

例如,如果我们在@ControllerAdvice中定义了一个处理EmptyResponseException异常的方法,那么在发生EmptyResponseException异常时,将会执行该方法,而不会执行处理所有异常的方法。

java

@ControllerAdvice

public class GlobalExceptionHandler {

// 处理EmptyResponseException异常

@ExceptionHandler(EmptyResponseException.class)

@ResponseStatus(HttpStatus.OK)

@ResponseBody

public ResponseEntity handleEmptyResponseException(EmptyResponseException ex) {

// 返回空主体的响应

return new ResponseEntity<>(null, HttpStatus.OK);

}

// 处理除自定义异常外的其他异常

@ExceptionHandler(Exception.class)

@ResponseStatus(HttpStatus.OK)

@ResponseBody

public ResponseEntity handleException(Exception ex) {

// 返回空主体的响应

return new ResponseEntity<>(null, HttpStatus.OK);

}

}

在上面的代码中,我们定义了一个处理EmptyResponseException异常的方法handleEmptyResponseException,并将它的优先级设置为最高。当发生EmptyResponseException异常时,将会执行该方法。

通过使用@ControllerAdvice注解,我们可以方便地处理除了我们自定义的异常之外的其他异常,并以空主体的形式进行响应。我们可以根据具体的需求,在@ControllerAdvice中定义不同的异常处理方法,并通过设置优先级来控制异常的处理顺序。

在本文中,我们演示了如何使用@ControllerAdvice来处理除了我们自定义的异常之外的其他异常,并以空主体进行响应。我们创建了一个自定义异常EmptyResponseException,并在GlobalExceptionHandler类中定义了处理该异常的方法。

以上就是关于Spring Boot Rest以空主体响应除了@ControllerAdvice中覆盖的异常之外的异常的实现方法及案例代码。通过这种方式,我们可以更加灵活地处理不同类型的异常,并为它们提供自定义的响应。