在Bean Validation中使用组的想法是什么?

时间:2015-06-10 08:53:00

标签: java bean-validation

简短地使用群组的想法是什么? 例如,类定义现在没有组。如果我们启用以下群组,会发生什么变化?

function MyApp(lang) {
    this.messages = {};
    this.switchLang(lang);
};

MyApp.prototype.loadLang = function(lang) {
    this.messages = require('./lang/' + lang + '.js');
};

MyApp.prototype.switchLang = function(lang) {
    this.lang = lang;
    this.loadLang(lang);
};

MyApp.prototype.sayHello = function() {
    alert(this.messages.HELLO);
};

module.exports = MyApp;

P.S。这些组还有两个相应的接口

2 个答案:

答案 0 :(得分:1)

另外kocko说,它们也意味着对验证规则进行分类。引自JSR-303 final spec

  

组允许您限制验证期间应用的约束集。

如果您重新添加上述组并按以下方式调用验证码:validator.validate(user, LengthGroup.class);,则只会验证字段的长度。这意味着不考虑@EmailAddress约束。

如果你这样调用验证器:validator.validate(user, LengthGroup.class, EmailGroup.class);,你的所有约束都将被验证。

更多用于此功能的用例将是验证具有联系人数据的用户版本,而不是。考虑下面的例子:

@Size(min = 4, max = 30)
private String name;

@Size(min = 12, max = 120, groups=WithContactInfo.class)
private String address;

@Size(min = 5, max = 30, groups= WithContactInfo.class)
@EmailAddress(groups = WithContactInfo.class)
private String email;

现在,您可以验证不需要与validator.validate(user)建立联系信息的用户,以及需要与validator.validate(user, WithContactInfo.class)建立联系信息的用户。

答案 1 :(得分:0)

通过不同的属性向同一目标多次声明相同的约束通常很有用。这就是小组的意义所在。考虑这个例子:

public class Address {
    @ZipCode.List( {
            @ZipCode(countryCode="fr", groups=Default.class
                     message = "zip code is not valid"),
            @ZipCode(countryCode="fr", groups=SuperUser.class
                     message = "zip code invalid. Requires overriding before saving.")
            } )
    private String zipcode;
}

在此示例中,两个约束都适用于zipcode字段,但具有不同的组和不同的错误消息。

取自here

的示例