Vel*_*aga 3 java validation spring hibernate-validator bean-validation
我正在使用validation-api-2.0.1.Final和hibernate-validator-6.0.13.Final。我想对以下情况进行验证,
我创建了一个自定义验证来验证 List<Map<String,Object>>
BookInfo.java
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
validatedBy = {BookInfoValidator.class}
)
public @interface BookInfo {
String message() default "Should not be empty";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)
BookInfoValidator.java
public class BookInfoValidator implements ConstraintValidator<ValidateUserInfo, List<Map<String, Object>>> {
private final ContentRepositoryClient contentRepository;
public ValidateUserInfoValidator(ContentRepositoryClient contentRepository) {
this.contentRepository = contentRepository;
}
@Override
public void initialize(ValidateUserInfo constraintAnnotation) {
}
@Override
public boolean isValid(List<Map<String,Object>> map, ConstraintValidatorContext constraintValidatorContext) {
//In the list of Map the key will be "text,email,date etc etc" based on the key i would like to
//validate with the proper validation constraints
//ex) for Email invoke javax.validation.constraints.Email.class from validation-api
//I am not sure how to manually invoke the validation annotations.
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
BookInfoView.java
class BookInfoView {
@BookInfo
private List<Map<String, Object>> bookInfos;
}
Run Code Online (Sandbox Code Playgroud)
在地图列表中,键为“文本,电子邮件,日期等”。基于密钥,我想使用javax.validation.constraints.Email.class来自validation-api的电子邮件调用的适当验证约束例外进行验证。我不确定如何手动调用验证批注。
任何提示或帮助将不胜感激。
我不确定如何手动调用验证批注。
我在上面引用的行中回答。是的,可以以编程方式调用验证,如果验证失败,您将收到一组中的所有失败消息。以下是执行相同操作的步骤:
ValidatorFactoryValidator实例ValidatorFactoryvalidate()方法执行验证constraintViolations.iterator().next().getMessage()显示一些代码,下面是上述所有四个步骤的代码片段:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<BookInfoView>> constraintViolations = validator.validate(bookInfoViewObj);
assertEquals( "Should not be empty", constraintViolations.iterator().next().getMessage() );
Run Code Online (Sandbox Code Playgroud)
Hibernate Validator框架提供了各种其他功能来验证一个或多个实体,然后处理结果。更好的是你看了官方文件。