SpringBoot中数据实体的异常类:全局异常类还是每个实体的单个异常类



迁移遗留数据库时,我为数据库中的每个重要表创建了一个实体类,然后为每个表创建了额外的存储库类。是最好为每个实体创建一个异常类,还是为所有实体或它们创建一个全局类?

您需要处理哪种异常?根据您的需要,答案是不同的。

Spring为您提供了一个异常层次结构,以便在数据访问API的具体实现上创建一个抽象层。在与数据库交互时,所有常见的异常场景都可以依赖它们。

异常层次结构实现复杂的独立错误处理使用中的数据访问方法。

抛出的主要异常是DataAccessException,由CannotCreateRecordExceptionDataIntegrityViolationExceptionCannotAcquireLockException等异常专门化。当需要数据但返回非时,则抛出EmptyResultDataAccessException

您可以在org.springframework.dao包的文档中找到层次结构中的所有异常。

对于其他场景,例如,要在服务/web层自定义异常管理,可以为每个需要它们的实体创建自定义异常,也可以创建通用异常。这取决于您的要求。例如,您可以创建一个EntityNotFoundException,只要按id搜索没有返回任何结果,就可以抛出它。或者,您可以为每个实体创建一个异常,以防需要对每个实体进行特殊处理,例如BookNotFoundExceptionAuthorNotFoundException。无论哪种方式,您都必须显式抛出并处理自定义异常。

自定义异常示例:

public class BookNotFoundException extends RuntimeException {
public BookNotFoundException(String id) {
super("The book with id " + id + " was not found.");
}
}

抛出自定义异常的示例,其中BookRepository是映射到数据库中book表的Book实体的存储库。

@Service
public class BookService {
private final BookRepository bookRepository;
public BookService(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
public Book findBookById(String id) {
return bookRepository.findById(id)
.orElseThrow(() -> new BookNotFoundException(id));
}
}

最新更新