在Hibernate Validator 4.x中是否有(或第三方实现)交叉字段验证的实现?如果不是,那么实现交叉字段验证器的最简洁方法是什么?
例如,如何使用API来验证两个bean属性是否相等(例如验证密码字段是否与密码验证字段匹配).
在注释中,我希望有类似的东西:
public class MyBean {
@Size(min=6, max=50)
private String pass;
@Equals(property="pass")
private String passVerify;
}
Run Code Online (Sandbox Code Playgroud) 我似乎无法找到区分这三个注释之间差异的摘要.
我正在使用JPA 2.0/Hibernate验证来验证我的模型.我现在有一种情况,必须验证两个字段的组合:
public class MyModel {
public Integer getValue1() {
//...
}
public String getValue2() {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
该模型是无效的,如果这两个getValue1()
和getValue2()
的null
和有效的,否则.
如何使用JPA 2.0/Hibernate执行此类验证?使用简单的@NotNull
注释,两个getter都必须为非null才能通过验证.
我想用JSR-303做一点自定义验证javax.validation
.
我有一个领域.如果在此字段中输入了某个值,我想要求其他几个字段不是null
.
我想弄清楚这一点.不确定我会称之为什么来帮助找到解释.
任何帮助,将不胜感激.我对此很新.
目前我正在考虑自定义约束.但我不确定如何从注释中测试依赖字段的值.基本上我不确定如何从注释访问面板对象.
public class StatusValidator implements ConstraintValidator<NotNull, String> {
@Override
public void initialize(NotNull constraintAnnotation) {}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if ("Canceled".equals(panel.status.getValue())) {
if (value != null) {
return true;
}
} else {
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是panel.status.getValue();
给我带来麻烦..不知道如何实现这一目标.
什么样的配置,需要使用注释来自javax.validation.constraints
像@Size
,@NotNull
等等?这是我的代码:
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class Person {
@NotNull
private String id;
@Size(max = 3)
private String name;
private int age;
public Person(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在另一个类中使用它时,验证不起作用(即创建对象时没有错误):
Person P = new Person(null, "Richard3", 8229));
Run Code Online (Sandbox Code Playgroud)
为什么这不适用于id
和name
?我还需要做什么?
是否可以验证JSR 303中的对象集合 - Jave Bean Validation,其中集合本身没有任何注释,但包含的元素是什么?
例如,由于第二个人的名称为空,是否可能导致约束违规:
List<Person> people = new ArrayList<Person>();
people.add(new Person("dave"));
people.add(new Person(null));
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<List<Person>>> validation = validator.validate(people);
Run Code Online (Sandbox Code Playgroud) 在服务器端使用JSR 303 bean验证时,使用Javascript(最小代码重复)执行客户端表单验证的最佳方法是什么?我目前正在使用Spring 3和Hibernate Validator.
我试图创建Hibernate Validator bean,并遇到这个问题,从另一个类中的静态工厂方法创建一个bean.我找到了一种Spring方法来初始化我的Validator bean(底部的解决方案),但问题本身仍未解决.验证器在此处用作示例案例.
这就是我在Java中创建Validator实例的方法
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Run Code Online (Sandbox Code Playgroud)
这就是我尝试在applicationContext.xml中创建bean的方法
<bean id="validatorFactory"
class="javax.validation.ValidatorFactory"
factory-method="javax.validation.Validation.buildDefaultValidatorFactory" />
<bean id="validator"
class="javax.validation.Validator"
factory-bean="validatorFactory"
factory-method="getValidator" />
Run Code Online (Sandbox Code Playgroud)
我的理解是,在"工厂方法"中,您只能访问在"class"参数中定义的类中定义的静态方法.由于方法buildDefaultValidatorFactory()是静态的,我不能创建一个Validation实例,并将它作为validatorFactory的"factory-bean"给出,如下所示:
<bean id="validation" class="javax.validation.Validation" />
<bean id="validatorFactory"
class="javax.validation.ValidatorFactory"
factory-bean="validation"
factory-method="buildDefaultValidatorFactory" />
Run Code Online (Sandbox Code Playgroud)
这最终会出现错误消息
"检查是否存在具有指定名称的方法,并且它是非静态的 "
问题是你如何在Spring的这种情况下创建bean?
这就是我解决Validator问题的方法:
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
Run Code Online (Sandbox Code Playgroud) 我知道有非标准框架,如commons-validator和hibernate验证器.
我想知道是否有人知道官方标准的实施.
我想对@Unique
Bean Validation 有一个约束,但标准不提供.如果我使用JPA,@UniqueConstraint
我就没有独特的验证和错误报告机制.
有没有办法定义@Unique
为Bean Validation约束并将其与JPA组合,以便JPA创建一个具有唯一约束的列,并检查值是否唯一?
bean-validation ×10
java ×9
validation ×6
spring ×3
jpa ×2
annotations ×1
constraints ×1
hibernate ×1
javascript ×1
jpa-2.0 ×1
jsr ×1
unique ×1