关于SpringMVC之认识Validation(3)

我们可以看到我们在username、password和age对应的get方法上都加上了一个注解,这些注解就是JSR-303里面定义的限制,其中@NotBlank是Hibernate Validator的扩展。不难发现,使用JSR-303来进行校验比使用Spring提供的Validator接口要简单的多。我们知道注解只是起到一个标记性的作用,它是不会直接影响到代码的运行的,它需要被某些类识别到才能起到限制作用。使用SpringMVC的时候我们只需要把JSR-303的实现者对应的jar包放到classpath中,然后在SpringMVC的配置文件中引入MVC Namespace,并加上<mvn:annotation-driven/>就可以非常方便的使用JSR-303来进行实体对象的验证。加上了<mvn:annotation-driven/>之后Spring会自动检测classpath下的JSR-303提供者并自动启用对JSR-303的支持,把对应的校验错误信息放到Spring的Errors对象中。这时候SpringMVC的配置文件如下所示:

Xml代码 
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     
     
     
     
    "> 
     
    <mvc:annotation-driven/> 
</beans> 
 

接着我们来定义一个使用User对象作为参数接收者的Controller,其代码如下所示:

Java代码 
import javax.validation.Valid; 
import org.springframework.stereotype.Controller; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.annotation.RequestMapping; 
 
@Controller 
public class UserController { 
 
    @RequestMapping("login") 
    public String login(@Valid User user, BindingResult result) { 
      if (result.hasErrors()) 
          return "user/login"; 
      return "redirect:/"; 
    } 
   

这样当我们不带任何参数请求login.do的时候就不能通过实体对象User的属性数据有效性限制,然后会把对应的错误信息放置在当前的Errors对象中。

JSR-303原生支持的限制有如下几种:

限制

 

说明

 

@Null

 

限制只能为null

 

@NotNull

 

限制必须不为null

 

@AssertFalse

 

限制必须为false

 

@AssertTrue

 

限制必须为true

 

@DecimalMax(value)

 

限制必须为一个不大于指定值的数字

 

@DecimalMin(value)

 

限制必须为一个不小于指定值的数字

 

@Digits(integer,fraction)

 

限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction

 

@Future

 

限制必须是一个将来的日期

 

@Max(value)

 

限制必须为一个不大于指定值的数字

 

@Min(value)

 

限制必须为一个不小于指定值的数字

 

@Past

 

限制必须是一个过去的日期

 

@Pattern(value)

 

限制必须符合指定的正则表达式

 

@Size(max,min)

 

限制字符长度必须在min到max之间

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e30e1b0177f786093ad8d5c45da701c0.html