基于Spring MVC的Web应用开发(10) - Validation

本文介绍SpringMVC的验证(validation),在Convert一文中,我们知道SpringMVC能很方便的将提交的参数转成(convert)自定义的JavaBean,现在加入对JavaBean的验证,比如要求JavaBean的属性number(private Integer number)不允许为null且最大为5,属性date(private Date date)满足时间是未来的(今天以后的日期)。为此,pom.xml中需要添加两个依赖:

Xml代码   收藏代码
  1. <!-- JSR 303 with Hibernate Validator -->  
  2. <dependency>  
  3.     <groupId>javax.validation</groupId>  
  4.     <artifactId>validation-api</artifactId>  
  5.     <version>1.0.0.GA</version>  
  6. </dependency>  
  7. <dependency>  
  8.     <groupId>org.hibernate</groupId>  
  9.     <artifactId>hibernate-validator</artifactId>  
  10.     <version>4.1.0.Final</version>  
  11. </dependency>  

 javax.validation.validation-api-1.0.0.GA.jar是一个标准,只有接口方法(以javax开头的包一般都是接口包,业界定义的一些标准,比如servlet-api-2.5.jar中的javax.servlet.HttpServletRequest),还有一个是Hibernate提供的实现包org.hibernate.hibernate-validator-4.1.0.Final。

增加一个Controller,ValidationController:

Java代码   收藏代码
  1. package org.springframework.samples.mvc.validation;  
  2.   
  3. import javax.validation.Valid;  
  4.   
  5. import org.springframework.stereotype.Controller;  
  6. import org.springframework.validation.BindingResult;  
  7. import org.springframework.web.bind.annotation.RequestMapping;  
  8. import org.springframework.web.bind.annotation.ResponseBody;  
  9.   
  10. @Controller  
  11. public class ValidationController {  
  12.   
  13.     // enforcement of constraints on the JavaBean arg require a JSR-303 provider on the classpath  
  14.       
  15.     @RequestMapping("/validate")  
  16.     public @ResponseBody String validate(@Valid JavaBean bean, BindingResult result) {  
  17.         if (result.hasErrors()) {  
  18.             return "Object has validation errors";  
  19.         } else {  
  20.             return "No errors";  
  21.         }  
  22.     }  
  23.   
  24. }  

和一个JavaBean:

Java代码   收藏代码
  1. package org.springframework.samples.mvc.validation;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import javax.validation.constraints.Future;  
  6. import javax.validation.constraints.Max;  
  7. import javax.validation.constraints.NotNull;  
  8.   
  9. import org.springframework.format.annotation.DateTimeFormat;  
  10. import org.springframework.format.annotation.DateTimeFormat.ISO;  
  11.   
  12. public class JavaBean {  
  13.       
  14.     @NotNull  
  15.     @Max(5)  
  16.     private Integer number;  
  17.   
  18.     @NotNull  
  19.     @Future  
  20.     @DateTimeFormat(iso=ISO.DATE)  
  21.     private Date date;  
  22.   
  23.     public Integer getNumber() {  
  24.         return number;  
  25.     }  
  26.   
  27.     public void setNumber(Integer number) {  
  28.         this.number = number;  
  29.     }  
  30.   
  31.     public Date getDate() {  
  32.         return date;  
  33.     }  
  34.   
  35.     public void setDate(Date date) {  
  36.         this.date = date;  
  37.     }  
  38.   
  39. }   

  @NotNull、@Future就是javax.validation.validation-api-1.0.0.GA.jar中定义的注解,满足之前说到的需求。

ValidationController的validate方法绑定了一个参数BindingResult result,通过这个变量就可以得到具体的验证信息,比如在validate方法中,如果验证不通过(result.hasErrors()),返回给浏览器文本"Object has validation errors"。

 

1. 访问"http://localhost:8080/web/validate",浏览器显示"Object has validation errors",number和date不能为空;

 

2. 访问"http://localhost:8080/web/validate?number=1",浏览器显示"Object has validation errors",date不能为空;

 

3. 访问"http://localhost:8080/web/validate?number=1&date=2012-03-31",浏览器显示"Object has validation errors",非今天以后的日期;

 

4. 访问"http://localhost:8080/web/validate?number=1&date=2012-04-01",浏览器显示"No errors";

 

5. 访问"http://localhost:8080/web/validate?number=6&date=2012-04-01",浏览器显示"Object has validation errors",number不能大于5;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值