何时使用 ResponseStatusException 和 ControllerAdvice
When to use ResponseStatusException and ControllerAdvice
Spring5 引入了 ResponseStatusException,这让我进退两难,不知道在什么情况下我可以使用 ResponseStatusException 和 ControllerAdvice,因为它们非常相似。
谁能帮我解决这个问题。
提前致谢。
先了解什么是ResponseStatusException和ControllerAdvice
ResponseStatusException 是@ResponseStatus 的编程替代方案,是用于将状态代码应用于 HTTP 响应的异常的基础 class。
@GetMapping("/actor/{id}")
public String getActorName(@PathVariable("id") int id) {
try {
return actorService.getActor(id);
} catch (ActorNotFoundException ex) {
throw new ResponseStatusException(
HttpStatus.NOT_FOUND, "Actor Not Found", ex);
}
}
@ControllerAdvice 注解允许我们将多个分散的@ExceptionHandlers 整合到一个单一的全局错误处理组件中。
@ControllerAdvice
public class RestResponseEntityExceptionHandler
extends ResponseEntityExceptionHandler {
@ExceptionHandler(value
= { IllegalArgumentException.class, IllegalStateException.class })
protected ResponseEntity<Object> handleConflict(
RuntimeException ex, WebRequest request) {
return ResponseEntity<Object>;
}
}
回到您关于何时使用什么的问题:
- 如果您想提供统一的全局异常处理方式,请使用
控制器建议。它还消除了可能由 ResponseStatusException 引起的代码重复。
- 为了对同一异常抛出不同的错误代码和响应,不想创建自定义异常 classes 并避免紧耦合使用 ResponseStatusException。
参考文献:
总的来说,如果您正在寻找更统一的解决方案,最好使用@ControllerAdvice,但 ResponseStatusException 也很方便,以防您不想创建不同的异常 类 并希望保持简单.
有关示例和更多信息,您可以参考以下文章:
Spring5 引入了 ResponseStatusException,这让我进退两难,不知道在什么情况下我可以使用 ResponseStatusException 和 ControllerAdvice,因为它们非常相似。
谁能帮我解决这个问题。 提前致谢。
先了解什么是ResponseStatusException和ControllerAdvice
ResponseStatusException 是@ResponseStatus 的编程替代方案,是用于将状态代码应用于 HTTP 响应的异常的基础 class。
@GetMapping("/actor/{id}")
public String getActorName(@PathVariable("id") int id) {
try {
return actorService.getActor(id);
} catch (ActorNotFoundException ex) {
throw new ResponseStatusException(
HttpStatus.NOT_FOUND, "Actor Not Found", ex);
}
}
@ControllerAdvice 注解允许我们将多个分散的@ExceptionHandlers 整合到一个单一的全局错误处理组件中。
@ControllerAdvice
public class RestResponseEntityExceptionHandler
extends ResponseEntityExceptionHandler {
@ExceptionHandler(value
= { IllegalArgumentException.class, IllegalStateException.class })
protected ResponseEntity<Object> handleConflict(
RuntimeException ex, WebRequest request) {
return ResponseEntity<Object>;
}
}
回到您关于何时使用什么的问题:
- 如果您想提供统一的全局异常处理方式,请使用 控制器建议。它还消除了可能由 ResponseStatusException 引起的代码重复。
- 为了对同一异常抛出不同的错误代码和响应,不想创建自定义异常 classes 并避免紧耦合使用 ResponseStatusException。
参考文献:
总的来说,如果您正在寻找更统一的解决方案,最好使用@ControllerAdvice,但 ResponseStatusException 也很方便,以防您不想创建不同的异常 类 并希望保持简单.
有关示例和更多信息,您可以参考以下文章: