服务层:如果查询参数为null,返回什么?

时间:2013-03-16 08:59:01

标签: java nullpointerexception illegalargumentexception method-parameters

假设我们有一个服务方法getById(Long id),它根据其id返回一个实体。如果id为null,那么正确的操作是什么?

抛出IllegalArgumentException?

抛出NullPointerException? (guavas Preconditions.checkNotNull这样做)

返回null?

由于永远不会有id == null的实体,返回null似乎不是那么糟糕?我的意思是如果id不存在,方法将返回null。

前提是很好的单行,但在这种情况下抛出NullPointerException似乎极端。

这里的“最佳实践”是什么?

3 个答案:

答案 0 :(得分:2)

将null传递给这样的方法表明存在错误。没有人会想要找到具有空ID的实体,因为不存在这样的事物。所以这可能意味着UI层中存在绑定问题,或者调用者忘记在其表单中添加隐藏的ID字段,或者其他任何内容。

返回null会隐藏错误,或使其更加模糊。抛出异常可以及早发现错误,并提供明确的错误消息,允许及早修复它,并使应用程序更加稳健。

null为null的非可空参数的约定是抛出NullPointerException。那就是我要做的。

答案 1 :(得分:1)

id null没有记录,因此如果给出没有记录的“有效”id,该方法应该做任何事情。这是最不惊讶的原则。消费者将根据未找到的情况进行编码,因此应将其覆盖。

有一件事,新纪录的id是什么还没有被保留?如果恰好是null

,这可能会导致您的行为偏离

答案 2 :(得分:0)

始终最好使用NullPointerException,因为在实体集合中ID没有找到任何内容。