Java模型验证

Java模型验证,java,validation,model,relationship,Java,Validation,Model,Relationship,我们正在寻找一个Java库/系统/包,它不仅可以进行基本验证,还可以进行关系验证。我们需要能够表达基于多个相关实体的验证标准 大多数验证模型SpringValidation、JSR303专门针对bean属性的验证。但我们需要一些能穿过豆子的东西 我们的需求是提出一种验证模型状态的方法,同时将验证逻辑从java代码中具体化 在上面的定义中,Bean只是一个POJO,模型是相关Bean的集合。因此,例如,如果Account有一组地址,并且Account.countryOfResidence设置为US

我们正在寻找一个Java库/系统/包,它不仅可以进行基本验证,还可以进行关系验证。我们需要能够表达基于多个相关实体的验证标准

大多数验证模型SpringValidation、JSR303专门针对bean属性的验证。但我们需要一些能穿过豆子的东西

我们的需求是提出一种验证模型状态的方法,同时将验证逻辑从java代码中具体化

在上面的定义中,Bean只是一个POJO,模型是相关Bean的集合。因此,例如,如果Account有一组地址,并且Account.countryOfResidence设置为USA,我希望有一个验证规则,确保所有地址中都有一个USA国家

因此,在向帐户添加地址的“操作”过程中,验证将启动,以确保Address.country与Account.countryOfResidence相同

我们正在研究德鲁尔,但想看看是否还有其他选择


有关于如何继续的建议吗?

不确定这个项目有多活跃,但我不久前使用过它,它提供了一些功能来完成您所描述的任务-看看它是否有用:

当然还有杰斯:

这也可能值得一看,尽管我对它知之甚少。
弗拉德:

我认为这是可能的

有几个自定义的跨域验证器,可以作为创建自己的验证器的基础

下面是
@ScriptAssert
验证器的一个示例

@ScriptAssert(lang="javascript", script="_this.countryOfResidence.equals(_this.address.country)")
// @ScriptAssert(lang="jexl", script="_this.countryOfResidence == _this.address.country")
public class Account {
    @NotNull @Valid
    private Address adddress;

    private String countryOfResidence;
}

public class Address {
    ...
    @NotNull
    private String country;
}
这当然比自定义验证器少很多代码

@ScriptAssert(lang="javascript", script="_this.countryOfResidence.equals(_this.address.country)")
// @ScriptAssert(lang="jexl", script="_this.countryOfResidence == _this.address.country")
public class Account {
    @NotNull @Valid
    private Address adddress;

    private String countryOfResidence;
}

public class Address {
    ...
    @NotNull
    private String country;
}


注意:验证器也可以用XML创建(如果你这样做的话)。

我对这个领域的可用功能感到失望——可能是因为我想要一个不可能的功能组合——吃蛋糕和吃蛋糕。因此,这是一个冗长的评论,而不是我至少考虑的答案。我把这个问题标记为“最喜欢的”,希望其他人能给我们指出一个重大的问题。但我猜房子里没有巫师

一种可能性是,特别是在相关Eclipse插件提供支持的情况下。我已经看过了,并拒绝了它,因为它似乎不值得努力-但你的里程可能会有所不同

另一种可能性(也许!!!)是利用为其编写的工具之一的部分。然而,这些都是为测试而编写的,而不是为生产代码而编写的——“给定场景x,我希望y会发生”。我指的是easyb、jbehave和cuke4duke港口,尤其是。我认为jbehave对您来说太重了,而且我还没有认真研究cucumber


如果你找到适合你的答案,请回来写下你自己的答案。请注意,你在这一点上得到了7张赞成票和4张赞成票

在您的上下文中,什么是模型,什么是“模型状态”,什么是验证?如果人们知道你在寻找什么,它可能会帮助他们找到答案?Java似乎是实现这一点的最具表现力的语言,有很多可用的API,并且可以轻松访问Java对象?我怀疑您是否会找到任何预先制作好的东西来做类似的事情,但是您可能可以在上面提到的一个API中编写自己的验证器。我更新了这个问题,以澄清我所说的模型是什么意思。为什么您需要“将验证逻辑外部化到java代码之外”?我并不是在反对它——我可以大致猜测——但如果能听到你的具体情况,那就太好了。特别是,验证需求用什么语言表示。例如,可供“普通公众”阅读等等……Jess的另一个替代方案是JBoss项目,以前称为Drools;2) 在单独文件中定义的验证规则;3) 验证在单独的XML文件中定义。