栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Hibernate Validator(JSR 303)进行跨字段验证

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Hibernate Validator(JSR 303)进行跨字段验证

每个字段约束都应由不同的验证者注释处理,换句话说,不建议对一个字段进行其他字段的验证注释检查。跨领域验证应在课程级别进行。另外,JSR-303第2.2节表示同一类型的多个验证的首选方法是通过注释列表。这样可以在每次匹配中指定错误消息。

例如,验证通用格式:

@FieldMatch.List({        @FieldMatch(first = "password", second = "/confirm/iPassword", message = "The password fields must match"),        @FieldMatch(first = "email", second = "/confirm/iEmail", message = "The email fields must match")})public class UserRegistrationForm  {    @NotNull    @Size(min=8, max=25)    private String password;    @NotNull    @Size(min=8, max=25)    private String /confirm/iPassword;    @NotNull    @Email    private String email;    @NotNull    @Email    private String /confirm/iEmail;}

注释:

package constraints;import constraints.impl.FieldMatchValidator;import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.documented;import static java.lang.annotation.ElementType.ANNOTATION_TYPE;import static java.lang.annotation.ElementType.TYPE;import java.lang.annotation.Retention;import static java.lang.annotation.RetentionPolicy.RUNTIME;import java.lang.annotation.Target;@Target({TYPE, ANNOTATION_TYPE})@Retention(RUNTIME)@Constraint(validatedBy = FieldMatchValidator.class)@documentedpublic @interface FieldMatch{    String message() default "{constraints.fieldmatch}";    Class<?>[] groups() default {};    Class<? extends Payload>[] payload() default {};        String first();        String second();        @Target({TYPE, ANNOTATION_TYPE})    @Retention(RUNTIME)    @documented @interface List    {        FieldMatch[] value();    }}

验证者:

package constraints.impl;import constraints.FieldMatch;import org.apache.commons.beanutils.BeanUtils;import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;public class FieldMatchValidator implements ConstraintValidator<FieldMatch, Object>{    private String firstFieldName;    private String secondFieldName;    @Override    public void initialize(final FieldMatch constraintAnnotation)    {        firstFieldName = constraintAnnotation.first();        secondFieldName = constraintAnnotation.second();    }    @Override    public boolean isValid(final Object value, final ConstraintValidatorContext context)    {        try        { final Object firstObj = BeanUtils.getProperty(value, firstFieldName); final Object secondObj = BeanUtils.getProperty(value, secondFieldName); return firstObj == null && secondObj == null || firstObj != null && firstObj.equals(secondObj);        }        catch (final Exception ignore)        { // ignore        }        return true;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/381772.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号