在 Spring-Boot 和 Spring-Data 2.0 之前,我使用 org.springframework.boot.context.config.ResourceNotFoundException
检查实体实例是否在数据库中。我在 Controller 中使用了以下异常处理程序:
@ExceptionHandler(ResourceNotFoundException.class)
public HttpStatus handleNotFoundResource() {
return HttpStatus.NOT_FOUND;
}
现在,因为存储库方法返回一个可选的,我使用 java.util.NoSuchElementException
在 Controller 中完成这项工作:
@ExceptionHandler(NoSuchElementException.class)
public HttpStatus handleNotFoundResource() {
return HttpStatus.NOT_FOUND;
}
这是最佳实践吗?
最佳答案
NoSuchElementException
比您定义为在特定情况下抛出的自定义异常 ResourceNotFoundException
范围更广:数据库中没有实体/资源。
在 Controller 和存储库层之间,除了 Repository.findXXX().get()
。
所以你的想法可能会产生不良的副作用。
为防止任何回归,您应该显式处理 Optional
解包,例如 return Optional.orElseThrown(ResourceNotFoundException::new)
。
如果您想概括它,您可以为您的存储库引入一个基类来执行此处理。
关于java - NoSuchElementException 是 ResourceNotFoundException 的一个很好的替代品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51988322/