当前位置: 首页 > 知识库问答 >
问题:

在Spring数据中,我是否应该偏执于处理所有可能的异常?

茹高义
2023-03-14

假设我有这行代码

@Override
public Optional<Category> getCategoryById(int id) {
    return repository.findById(id);
}

Spring数据的留档说明了“findById”函数:

抛出:IllegalArgumentException-如果id为空。

在我的例子中,它不可能为null,所以我是否仍然应该添加try-catch块来处理发生错误的情况?此外,是否应该尝试/抓住它并进行相应处理?还是我应该让它被扔掉

@ControllerAdvice/异常处理程序处理它并将错误返回给用户?

共有1个答案

邰建业
2023-03-14

一般来说,如果你能保证这个方法永远不会被传递一个不存在的ID,那么你可以考虑@skillythrows

来自龙目岛项目。

假设这是一个更大的项目,请确保您对@skillythrows的使用有文档记录。

 类似资料:
  • 我搜索了很多,几乎所有我发现的例子都使用了控制器中的异常处理和自己的异常处理程序。我一直认为这应该在程序的服务层上完成。如果不是,我真的不明白为什么要创建单独的服务层。 另外,如果我在Controller中实现异常处理,是否意味着我必须在前面的所有层中抛出异常?

  • 我有一个Spring Boot应用程序,通过从kafka收集数据,我正在做很多插入。我希望使用 saveAll 批处理插入来提高性能。但是很少有数据会被认为是重复的,每当在我的代码中捕获DataIntegrityViolationException时,我都会更新它们。使用批处理插入,有没有办法为每个重复的数据捕获此异常,并使用 do 更新代码进行处理?

  • 你看?我应该编写多少额外的代码来向Api客户端返回正确的响应?此外,我可以忘记捕获一些可以正确报告的异常,它将作为默认的内部服务器异常返回。在controller中,我总是应该查看服务层,并检查哪些异常可以引发服务以正确处理它们。(请不要建议在java中检查异常)。 现在让我们来看看另一种解决方案: 在服务层(模型)中使用HttpStatus引发异常 就这样了。代码更少。现在我不必处理每一个可能引

  • 问题内容: 在将变量插入Java中的数据库之前,建议使用哪种转义变量的方法? 据我了解,我可以使用PreparedStatement.setString()来转义数据,但是,如果我不打算再次运行相同的查询,则PreparedStatement似乎不切实际。.是否有一种更好的方式来做而不准备每个查询? 问题答案: 是的,对所有内容使用准备好的语句。 他们被解析一次。 他们不受SQL注入攻击的影响。

  • 问题内容: 如果我在.NET中没有记错的话,可以为未处理的异常注册“全局”处理程序。我想知道Java是否有类似的东西。 问题答案: 是的,有,但只有在没有设置时才会触发。

  • 问题内容: 我有一个表,该表具有指向两个不同表的两个外键,两个外键 共享一个列 : 如您所见,有两个FK共享country_code(恰好在引用路径的末尾引用同一列)。实体类看起来像(JPA 1.0 @IdClass): 如您所见,我将countryCode属性和城市的country_code @JoinColumn标记为只读(insertable = false,可更新= false)。Hibe