技术,互联网,eLearning …
« »
2009年10月30日企业开发

试用Spring 3.0对于JSR 303(bean validation)的支持

JSR 303是标准的bean validation框架, 还没有发布正式版,最新的版本是1.0CR5。通过JSR 303,我们可以为域模型里添加@NotNull, @Email等注解,然后在应用程序的不同层里使用这些注解对于域模型做验证。

JSR 303目前有两个实现,分别是agimatec-validationHibernate Validator 4.0,这二者目前都没有正式版,但是测试版已经可以使用了。

Spring 3.0刚刚发布了RC1版,里面提供了对于JSR303的初步支持,试了一下,感觉还不错。

测试程序使用maven, 用的是hibernate的实现。首先,需要在pom里加入相关依赖:

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.CR5</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.0.0.CR1</version>
    </dependency>

在Spring的配置文件里加入validator factory:

<bean id="validator" >
  <property name="providerClass" 
            value="org.hibernate.validator.HibernateValidator"/>
</bean>

测试用的model:

public class User{
    private String username;

    @NotNull(message = "用户名不能为空!")
    @Size(min = 3, max = 16, message = "用户名最少 {min}, 最大 {max} 个字符")
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

测试用例:

@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
@TransactionConfiguration(defaultRollback = true)
public class TestValidator{

    @Autowired
    @Qualifier("validator")
    private Validator validator;

    @Test
    public void testValidator(){
        User user = new User();
        user.setUsername("a");

        Set<ConstraintViolation<User>> vals = validator.getInvalidValues(user);

        Assert.assertEquals(1, vals.size());
    }
}

运行 mvn test,测试通过。

update: 如果要配合Spring MVC合用,则需要在applicationContext里配置:

  <bean>
    <property name="webBindingInitializer">
        <!-- Configures Spring MVC DataBinder instances -->
        <bean>
            <property name="validator" ref="validator" />
        </bean>
    </property>
</bean>

这样,对于标注为@Controller类里的@Valid标记的对象,Spring会自动做验证。

日志信息 »

该日志于2009-10-30 22:55由 rockmaple 发表在企业开发分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

没有评论

发表评论 »

返回顶部