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 中阅读有关错误处理的更多信息。