SpringMVC 数据校验(JSR303)

JSR-303是一个数据验证的规范,Spring没有对这一规范进行实现,那么当我们在SpringMVC中需要使用到JSR-303的时候就需要我们提供一个对JSR-303规范的实现,Hibernate Validator是实现了这一规范的,这里我将以它作为JSR-303的实现来讲解SpringMVC对JSR-303的支持。
JSR-303的校验是基于注解的,它内部已经定义好了一系列的限制注解,我们只需要把这些注解标记在需要验证的实体类的属性上或是其对应的get方法上。
不难发现,使用JSR-303来进行校验比使用Spring提供的Validator接口要简单的多。我们知道注解只是起到一个标记性的作用,它是不会直接影响到代码的运行的,它需要被某些类识别到才能起到限制作用。使用SpringMVC的时候我们只需要把JSR-303的实现者对应的jar包放到classpath中,然后在SpringMVC的配置文件中引入MVC Namespace,并加上就可以非常方便的使用JSR-303来进行实体对象的验证。加上了之后Spring会自动检测classpath下的JSR-303提供者并自动启用对JSR-303的支持,把对应的校验错误信息放到Spring的Errors对象中。
Hibernate Validator JAR包:
hibernate-validator-5.4.1.Final/dist/hibernate-validator-5.4.1.Final.jar
hibernate-validator-5.4.1.Final/dist\lib/required 4个jar包

springMVC web.xml配置
在项目的开始位置添加

<mvc:annotation-driven />

使用restful风格配置文件,只需在WebConfig中添加@EnableWebMvc

Controller

@RequestMapping(value="/regex",method={RequestMethod.GET,RequestMethod.POST})
public String regexUser(@Valid User user,BindingResult result){
        if(result.hasErrors()){
            return "registerForm";
        }else{
            return"display";
        }
}

通过在命令对象上注解@Valid来告诉Spring MVC此命令对象在绑定完毕后需要进行JSR-303验证,如果验证失败会将错误信息添加到errors错误对象中。

pojo类

public class User {

    private String id;  
    private String name;  
    private String age;
    private Address address; 

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    @NotBlank(message="用户名不能为空")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "{\"id\":\"" + id + "\", \"name\":\"" + name + "\", \"age\":\"" + age + "\"} ";
    }

jsp页面

<sf:form method="POST" commandName="user" action="${pageContext.request.contextPath}/spittles/regex">
name:<sf:input path="name"/><sf:errors path="name" /> 
age:<sf:input path="age"/>
<input type="submit" value="submit"> 
sf:form>

你可能感兴趣的:(springmvc)