读书人

创办自定义JSR303的验证约束(Creating

发布时间: 2012-10-16 09:57:37 作者: rapoo

创建自定义JSR303的验证约束(Creating custom constraints)

????? 由于输入验证在软件开发中是必须的一件事情,特别是与用户交互的软件产品,验证用户的潜在输入错误是必不可少的一件事情,然而各种开源的验证框架也很多,为了一统标准,jsr303规范横空出世了,它定义了一些标准的验证约束,标准毕竟是标准,它不可能定义到所有的验证约束,它只是提供了一些基本的常用的约束,不过它提供了一个可拓展的自定义验证约束。下面就来说说怎么样自定义一个约束.

????? 为了创建一个自定义约束,以下三个步骤是必须的。
? Create a constraint annotation (首先定义一个约束注解)
? Implement a validator(第二步是实现这个验证器)
? Define a default error message(最后添加一条默认的错误消息即可)

??? 假定有这么一个要求,要验证用户的两次输入密码必须是相同的,非常常见的一个要求。下面就基于这个要求来自定义一个约束。

?

?单元测试如下:

package org.leochen.samples;import org.junit.BeforeClass;import org.junit.Test;import javax.validation.ConstraintViolation;import javax.validation.Validation;import javax.validation.Validator;import javax.validation.ValidatorFactory;import java.util.Set;import static junit.framework.Assert.assertEquals;import static junit.framework.Assert.assertNotNull;/** * User: leochen * Date: 11-12-20 * Time: 下午4:06 */public class TwoPasswordsTest {    private static Validator validator;    @BeforeClass    public static void setUp() {        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();        validator = factory.getValidator();    }    @Test    public void testBuildDefaultValidatorFactory() {        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();        Validator validator = factory.getValidator();        assertNotNull(validator);    }    @Test    public void testPasswordEqualsConfirmPassword() {        TwoPasswords bean = new TwoPasswords();        bean.setPassword("110");        bean.setConfirmPassword("110");        Set<ConstraintViolation<TwoPasswords>> constraintViolations = validator.validate(bean);        for (ConstraintViolation<TwoPasswords> constraintViolation : constraintViolations) {            System.out.println(constraintViolation.getMessage());        }        assertEquals("newPassword and confirmNewPassword should be the same.", 0, constraintViolations.size());    }    @Test    public void testPasswordNotEqualsConfirmPassword() {        TwoPasswords bean = new TwoPasswords();        bean.setPassword("110");        bean.setConfirmPassword("111");        Set<ConstraintViolation<TwoPasswords>> constraintViolations = validator.validate(bean);        assertEquals(1, constraintViolations.size());        assertEquals("two password not the same", constraintViolations.iterator().next().getMessage());    }    @Test    public void testIfTwoPasswordWereNullShouldPast() {        TwoPasswords bean = new TwoPasswords();        bean.setPassword(null);        bean.setConfirmPassword(null);        Set<ConstraintViolation<TwoPasswords>> constraintViolations = validator.validate(bean);        assertEquals(0, constraintViolations.size());    }    @Test    public void testIfOneIsNullAndOtherIsNotShouldNotPast() {        TwoPasswords bean = new TwoPasswords();        bean.setPassword(null);        bean.setConfirmPassword("110");        Set<ConstraintViolation<TwoPasswords>> constraintViolations = validator.validate(bean);        assertEquals(1, constraintViolations.size());        assertEquals("two password not the same", constraintViolations.iterator().next().getMessage());    }}

?测试全部通过的

?

读书人网 >网络基础

热点推荐