gpt4 book ai didi

java - 在带有 Spring Rest 的全局异常处理程序中使用通用异常类处理程序是一个好习惯吗?

转载 作者:行者123 更新时间:2023-12-02 08:37:26 25 4
gpt4 key购买 nike

我引用了几篇文章,使用@ControllerAdvice为我使用spring的rest api项目创建全局异常处理程序。这样做的目的是在发生异常时向客户端发送正确格式的响应。在一些文章中,他们在全局异常处理程序中添加了 Throwable 或 Exception 。我应该用 RunTimeException 替换它吗,因为该 block 用于运行时发生的异常?

异常处理程序代码:

@ControllerAdvice
public class GlobalExceptionHandler{

@ExceptionHandler(NoDataFoundException.class)
@ResponseStatus(code=HttpStatus.NOT_FOUND)
public ResponseEntity<ErrorResponse> handle(NoDataFoundException ex){
ErrorResponse errorResponse = new ErrorResponse(ex.getMessage(), HttpStatus.NOT_FOUND.value());
ResponseEntity<ErrorResponse> response = new ResponseEntity<ErrorResponse>(errorResponse, HttpStatus.NOT_FOUND);
return response;
}
..... more methods to handle custom exceptions

@ExceptionHandler(Exception.class)
@ResponseStatus(code=HttpStatus.INTERNAL_SERVER_ERROR)
public ResponseEntity<ErrorResponse> handle(Exception ex){
ErrorResponse errorResponse = new ErrorResponse("Something went wrong", HttpStatus.INTERNAL_SERVER_ERROR.value());
ResponseEntity<ErrorResponse> response = new ResponseEntity<ErrorResponse>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
return response;
}
}

错误响应代码:

public class ErrorResponse {

private String message;
private int statusCode;

public ErrorResponse(String message, int statusCode) {
super();
this.message = message;
this.statusCode = statusCode;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getStatusCode() {
return statusCode;
}
public void setStatusCode(int statusCode) {
this.statusCode = statusCode;
}
}

引用文献:

  1. https://dzone.com/articles/exception-handling-in-spring-boot-rest-web-service
  2. https://github.com/in28minutes/spring-boot-examples/tree/master/spring-boot-2-rest-service-exception-handling

最佳答案

Should I replace it with RunTimeException as this block is for exception occurred at runtime?

确保您捕获任何抛出的异常,并且组件或任何类型异常多于 Exception 的异常处理程序都不会处理该异常。 ,您应该有一个 Exception 的处理程序.
RuntimeException 的处理程序还不够,因为在运行时也会引发检查异常,并且如果高级组件的方法声明指定 throws Exceptionthrows "any checked exception" ,已检查的异常可以传播到客户端或此处将应用默认行为的容器。
例如,想象一下这个剩余 Controller 方法声明可能会导致这种情况发生:

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<Foo> getOne(@PathVariable long id) throws Exception {
// ....
}

要覆盖这个默认的 Spring 行为,您需要为 Exception 添加一个处理程序.
当然,这并不意味着只为Exception声明一个处理程序。是这样,但您可能会遇到一些没有特定处理的异常,为此通用处理就可以了。

关于java - 在带有 Spring Rest 的全局异常处理程序中使用通用异常类处理程序是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52392820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com