spring boot 是否会自动处理 JpaRepository 方法上下文中的错误处理?
Does spring boot automatically take care of error handling in the context of JpaRepository methods?
使用 Spring 引导时,我不确定 Spring 框架是否已经处理错误处理,或者我是否必须实施它。例如,考虑一个处理 DELETE 请求的控制器方法:
@DeleteMapping("/{studentId}")
public ResponseEntity<Long> deleteProfilePicture(@PathVariable Long studentId) {
return ResponseEntity.ok(profilePictureService.deleteprofilePictureByStudentId(studentId));
}
这样可以吗,还是我应该将它包装在 try-catch 块中:
@DeleteMapping("/{studentId}")
public ResponseEntity<Long> deleteProfilePicture(@PathVariable Long studentId) throws Exception {
try {
profilePictureService.deleteProfilePictureByStudentId(studentId));
} catch (DataAccessException e) {
throw new Exception("cannot delete profile picture of student: " + studentId);
}
}
另外:如果我让我的方法 deleteProfilePicture
抛出这个异常,谁在处理这个异常?这必须以某种方式由 Spring Boot 处理,因为可以在不产生任何错误的情况下实现它。无论如何,在这种情况下错误处理的正确方法是什么?
Spring Boot 会将异常转变为对 REST 调用者的错误响应 API。这并不意味着您不应该实现自己的错误处理逻辑,您确实应该这样做。例如,您可以使用 @ControllerAdvice
为您的应用程序进行全局异常处理。大致如下:
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {Exception.class})
public ResponseEntity<Object> handleGenericExceptions(Exception exception, WebRequest webRequest) {
log.error("Handling: ", exception);
HttpStatus errorCode = HttpStatus.INTERNAL_SERVER_ERROR;
return this.handleExceptionInternal(exception, new ErrorInfo(errorCode.value(), "Unexpected Internal Server Error"), new HttpHeaders(), errorCode, webRequest);
}
}
您可以在 Spring Boot at https://www.baeldung.com/exception-handling-for-rest-with-spring 中阅读有关错误处理的更多信息。
使用 Spring 引导时,我不确定 Spring 框架是否已经处理错误处理,或者我是否必须实施它。例如,考虑一个处理 DELETE 请求的控制器方法:
@DeleteMapping("/{studentId}")
public ResponseEntity<Long> deleteProfilePicture(@PathVariable Long studentId) {
return ResponseEntity.ok(profilePictureService.deleteprofilePictureByStudentId(studentId));
}
这样可以吗,还是我应该将它包装在 try-catch 块中:
@DeleteMapping("/{studentId}")
public ResponseEntity<Long> deleteProfilePicture(@PathVariable Long studentId) throws Exception {
try {
profilePictureService.deleteProfilePictureByStudentId(studentId));
} catch (DataAccessException e) {
throw new Exception("cannot delete profile picture of student: " + studentId);
}
}
另外:如果我让我的方法 deleteProfilePicture
抛出这个异常,谁在处理这个异常?这必须以某种方式由 Spring Boot 处理,因为可以在不产生任何错误的情况下实现它。无论如何,在这种情况下错误处理的正确方法是什么?
Spring Boot 会将异常转变为对 REST 调用者的错误响应 API。这并不意味着您不应该实现自己的错误处理逻辑,您确实应该这样做。例如,您可以使用 @ControllerAdvice
为您的应用程序进行全局异常处理。大致如下:
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {Exception.class})
public ResponseEntity<Object> handleGenericExceptions(Exception exception, WebRequest webRequest) {
log.error("Handling: ", exception);
HttpStatus errorCode = HttpStatus.INTERNAL_SERVER_ERROR;
return this.handleExceptionInternal(exception, new ErrorInfo(errorCode.value(), "Unexpected Internal Server Error"), new HttpHeaders(), errorCode, webRequest);
}
}
您可以在 Spring Boot at https://www.baeldung.com/exception-handling-for-rest-with-spring 中阅读有关错误处理的更多信息。