Spring5 引入了 ResponseStatusException,这让我陷入了两难的境地:在什么情况下可以使用 ResponseStatusException 和 ControllerAdvice,因为它们都很相似。
任何人都可以帮我解决这个问题吗? 预先感谢。
我们先来了解一下什么是ResponseStatusException和ControllerAdvice
ResponseStatusException 是 @ResponseStatus 的编程替代方案,并且是用于将状态代码应用于 HTTP 响应的异常的基类。
@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>;
}
}
回到您何时使用什么的问题:
参考资料:
总的来说,如果您正在寻找更统一的解决方案,那么最好使用@ControllerAdvice,但如果您不想创建不同的异常类并希望保持简单,则 ResponseStatusException 也很方便。
有关示例和更多信息,您可以参考以下文章(我写的):