据我了解,IllegalArgumentException旨在传达编程错误。
如果我正在编写一个基本上通过Web服务接受用户输入的服务层,如果Web服务传入客户端提供的非法参数,则IllegalArgumentException NOT 将是适当的,因为这不是一个真正的编程错误吗?创建自己的服务级别异常会更好吗?
答案 0 :(得分:2)
是的,应使用RuntimeException
(扩展名为IllegalArgumentException
)来明确编程错误或其他一些意外或不正确的操作。它应该发出一个警告,发现一个错误,应该通过测试来纠正和验证。
但是,根据您的设计如何分配职责,服务层抛出IllegalArgumentException
可能是完全合理的。从用例的角度来看,无论何时处理用户输入,您都必须期望无效的值并优雅地处理它们。它只是通过用例的替代路径,而且绝对会发生一些事情,所以不是真正的错误。
但处理无效的用户输入通常是用户界面的责任,因此网页应该优雅地处理错误的输入并让用户有机会进行更正(在登录尝试期间输入错误输入的密码) , 例如)。但是,由于这是预期的,它并不是一个例外。关键是如果用户界面能够在发送请求之前确保有效性,则不应向服务器发送无效请求。如果在用户界面中可以实现,则服务层抛出IllegalArgumentException
。
回到用户登录示例,用户界面只能确保输入的数据格式正确;它完全无法保证值实际上是正确的。因此,用户界面必须将正确格式化的输入发送到服务层。在这种情况下,我不会从服务层抛出异常,因为正确格式化但不正确的值是预期的发生。在这种情况下,如果用户界面发送的值格式不正确,我会抛出异常,但如果值不正确则不会抛出异常。在第二种情况下,我会回复用户界面说这些值不正确,但我不会抛出异常。
希望长答案有用 -