0

我正在一种实用方法中验证来自 Restlet URL 的一些输入(这样,如果我采取的行为发生变化,我只会将其更改一个地方,是的)。legalName 本质上将值验证为 alphaNumeric,但我可能很快会允许使用其他字符。

我试图让我的异常有意义——在这种情况下,什么异常是最好的?

public static String getProperty(Request request, String key) {
    String value = request.getAttributes().get(key).toString();
    // unless something is specifically text, it is a property
    if(legalName(value)) return value;
    throw new IllegalArgumentException(value);

}

我的想法是:

  • IllegalArgumentException - 键直接导致无效结果
  • IllegalStateException - 我们正在尝试使用不合格的值
  • 没有例外 - 返回一个空字符串并记录违规的事实
  • 没有例外 - 删除任何不受欢迎的字符,返回经过清理的字符串,并记录事实

当然,我不是第一个必须验证输入的人:-)

4

3 回答 3

2

当属性被存储而不是检索时,应该抛出这样的异常。检查Restlet 验证

如果您更愿意坚持您的解决方案:

  • 将方法重命名为validateName(..)并让它抛出异常。如果没有 - 返回值。
  • javax.validation.ValidationException看起来更好的选择,但你可以使用IllegalXException你提到的两个中的任何一个。只要确保他们有更详细的信息。
于 2011-07-17T15:57:20.953 回答
1

这似乎是无效的用户输入,所以首先我会选择某种 ValidationException 并使用验证框架,而不是自己管理它。如果不是 ValidationException,那么 IllegalArgumentException 可能是您列出的选择中最有意义的。

于 2011-07-17T15:56:18.567 回答
0

您可以使用自定义(您自己的)异常类。根据情况或验证,您可以使用适当的消息将其抛出。例如: 1.For Illegal Argument Exception case 在 try catch 中处理该代码块,并在 catch 中抛出您自己的带有正确消息的异常。

于 2011-07-17T16:02:07.080 回答