哪种例外最适合?

时间:2011-07-17 15:50:48

标签: java restlet input-sanitization

我在实用程序方法中验证来自Restlet URL的一些输入(这样,如果我采取的行为发生变化,我只改变它一个地方,yay)。 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 - 我们正在尝试使用不合格的值
  • 没有异常 - 返回一个空字符串并记录违规的事实
  • 没有例外 - 删除任何不受欢迎的字符,返回已清理的字符串,并记录事实

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可以使用自定义(自己的)异常类。根据情况或验证,您可以使用正确的消息抛出它。 对于Ex:1。对于非法参数异常情况处理try catch和catch中的代码块,使用正确的消息抛出自己的异常。