服务层:如果查询参数为null,返回什么?
假设我们有一个服务方法getById(Long id)
,它返回一个基于它的id的实体。 在id为null的情况下应该采取的适当措施是什么?
抛出IllegalArgumentException?
抛出NullPointerException? (番石榴Preconditions.checkNotNull这样做)
返回null?
既然不会有id == null的实体,返回null看起来并不好? 我的意思是如果id不存在,那么该方法无论如何都会返回null。
先决条件是很好的单线程,但在这种情况下抛出一个NullPointerException似乎极端。
这里最好的做法是什么?
将null传递给这种方法表示一个错误。 没有人会想要找到具有空ID的实体,因为不存在这样的事物。 所以这可能意味着在UI层中存在绑定问题,或者调用者忘记在其窗体中添加隐藏的ID字段,或者其他什么。
返回null隐藏该错误,或使其更加模糊。 抛出异常提前发现错误,并提供明确的错误消息,这可以提前修复它,并且使应用程序更加稳定。
非空的参数为null的约定是抛出一个NullPointerException。 这就是我要做的。
没有id
为null
记录,因此如果给定一个没有记录的“有效” id
,该方法应该做它所做的任何事情。 这是最不让人惊讶的原则。 消费者将编码为未找到的情况,因此应该将其涵盖。
有一件事,新记录的id
还没有被保存下来? 这可能会导致你偏离你的行为,如果它碰巧是null
总是最好使用NullPointerException
因为在Entity集合中没有找到ID中的值。
上一篇: Service layer: What to return if query argument is null?