用Java验证类的成员

时间:2012-04-24 10:52:24

标签: java string validation reflection

我想验证Java类对象以检查成员是否遵守某些规则。除了特定的规则,我还想检查是否有任何字符串成员为空/空。

这样做的好方法是什么(验证字符串成员)?

我的方法是:

if(StringUtils.isNotEmpty(sMember1) && StringUtils.isNotEmpty(sMember2)...)

是否有一种简洁的方法来验证所有字符串成员?

(反思是否可能?如果是,那将是一项昂贵的操作吗?)

4 个答案:

答案 0 :(得分:2)

您应该使用符合jsr 303标准的验证器。请参阅此讨论Is there an implementation of JSR-303 (bean validation) available?

答案 1 :(得分:1)

我还建议使用JSR 303作为@krishnakumarp指出,我不会构建自己的框架,但使用已经可用的任何东西。但是,如果您想了解如何实施它,那么它实际上非常简单:

public static Collection<ErrorMessage> validate(Object obj) {
    Collection<ErrorMessage> errors = new ArrayList<ErrorMessage>();
    Field[] fields = obj.getClass().getDeclaredFields();
    for (Field field : fields) {
        field.setAccessible(true);
        if (field.getType().equals(String.class)) {
            try {
                String value = (String) field.get(obj);
                if (isEmpty(value)) {
                    errors.add(new ErrorMessage(field.getName() + " is empty"));
                }
            }
            catch (Exception e) {
                // oops.
                e.printStackTrace();
            }
        }
    }
    return errors;
}

请注意,在此示例中,存在自定义错误处理,并且对于每个验证错误,都会创建ErrorMessage对象。

答案 2 :(得分:0)

有很多框架和库。看http://oval.sourceforge.net/

答案 3 :(得分:0)

为什么不考虑使用同一对象的setter方法设置成员的有效性?在对对象成员进行任何操作之前检查对象成员的有效性是很好的,但IMO最好在设置完成后立即进行验证。如果值不合适,请允许操作(在核心类中)向更高层抛出适当的异常。

注意:    如果您不重新考虑旧版片段,但是您正在编写新的数据对象,则此方法是可行的。