SpringMvc hibernate validator

validator(验证器)是作用于object级的。规范文档有两个,一个是JSR303 “Bean Validator”和JSR349 “Bean Validator 1.1”,它们都定义了一整套API。通过标注给对象的属性,来添加约束。也就是进行验证的规则。这两个约束可以从以下两个链接下载:
JSR303
JSR349
但是JSR只是一个规范文档,我们需要的是它的实现。我这里用的是Hibernate Validator,它实现了JSR303和JSR349
JSR303不需要编写验证器类,只需要利用JSR303的标注类型指定约束
这里copy了一份JSR303的约束表

空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.

Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true
@AssertFalse    验证 Boolean 对象是否为 false  

长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) Validates that the annotated string is between min and max included.

日期检查
@Past           验证 Date 和 Calendar 对象是否在当前时间之前
@Future     验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern    验证 String 对象是否符合正则表达式的规则

数值检查,建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null
@Min            验证 Number 和 String 对象是否大等于指定的值
@Max            验证 Number 和 String 对象是否小等于指定的值
@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits     验证 Number 和 String 的构成是否合法
@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。

@Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.
@Range(min=10000,max=50000,message="range.bean.wage")
private BigDecimal wage;

@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)
@CreditCardNumber信用卡验证
@Email  验证是否是邮件地址,如果为null,不进行验证,算通过验证。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)

springmvc跟 hibernate validator整合十分简单
1、 在springmvc配置文件中有这一句

<mvc:annotation-driven/>

2、 把hibernate validator的jar包添加到classpath路径下,如果项目部署在tomcat上,那/web-inf/lib中要有这个jar包
3、 在需要验证的object添加@Valid,在具体需要约束的属性上面添加约束

@RequestMapping(value = "/product_save")
    public String saveProduct(@Valid @ModelAttribute Product product,
            BindingResult bindingResult, Model model) {

        if (bindingResult.hasErrors()) {
            FieldError fieldError = bindingResult.getFieldError();
            logger.info("Code:" + fieldError.getCode() + ", object:"
                    + fieldError.getObjectName() + ", field:"
                    + fieldError.getField());
            return "ProductForm";
        }

        // save product here

        model.addAttribute("product", product);
        return "ProductDetails";
    }
public class Product implements Serializable {
    private static final long serialVersionUID = 78L;

    @Size(min=1, max=10)
    private String name;
    @NotEmpty
    private String description;
    @NotNull
    private Float price;

    @Past
    private Date productionDate;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public Float getPrice() {
        return price;
    }
    public void setPrice(Float price) {
        this.price = price;
    }
    public Date getProductionDate() {
        return productionDate;
    }
    public void setProductionDate(Date productionDate) {
        this.productionDate = productionDate;
    }

}

4、 如果需要覆盖验证器的错误信息,只需在属性文件中添加property键
形式为:constraint.object.property=需要显示的错误信息

Size.product.name = Product name must be 1 to 10 characters long
Past.product.productionDate=Production date must a past date
NotNull.product.price=价格不能为空

实例:

验证失败网页上会显示验证失败的消息
项目连接:SpringMvcValidatorTest

时间: 2024-11-08 22:23:45

SpringMvc hibernate validator的相关文章

hibernate validator 专题

JSR-303 原生支持的限制有如下几种 : 限制 说明 @Null 限制只能为 null @NotNull 限制必须不为 null @AssertFalse 限制必须为 false @AssertTrue 限制必须为 true @DecimalMax(value) 限制必须为一个不大于指定值的数字 @DecimalMin(value) 限制必须为一个不小于指定值的数字 @Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过 integer ,小数部分的

springmvc+hibernate 实体类映射错误

问题描述 springmvc+hibernate 实体类映射错误 type Exception report message Request processing failed; nested exception is org.hibernate.hql.ast.QuerySyntaxException: Users is not mapped [from Users u where u.loginName='ss' and u.password='aa'] description The se

Maven搭建SpringMVC+Hibernate项目详解(转)

  前言      今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hibernate4.3.8,之前也打了好多SpringMVC的,这部分已经非常的熟悉了,毕竟业开发过一年多SpringMVC的,这次持久层采用Hibernate,数据源采用c3p0,数据库暂采用MySQL,主要是想复习一下Hibernate.搭

懒加载session-多数据源springmvc+hibernate 切换问题 在一次请求中多次切换不成功

问题描述 多数据源springmvc+hibernate 切换问题 在一次请求中多次切换不成功 最近写了一个多数据源的代码,结果在使用的过程中出现了在一个请求中(方法中)两个数据库交替使用的情况,最后情况是数据库切换不过来 并且在项目配置中有懒加载和OpenSessionInViewFilter 数据库一个为本地数据库一个为基金数据库 要做的事情就是在本地查询到基金代码接着再循环去基金库查询基金数据 中间报错为在本地数据库中查询不到某个表(其实是在基金库中) controller层 @Reque

springmvc+hibernate服务器上报错,本地没问题

问题描述 springmvc+hibernate服务器上报错,本地没问题 使用springmvc+hibernate在服务器上部署的时候,访问控制器,能够进入控制器打出日志.但是无法显示页面.同时报错. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException

Spring+SpringMVC+Hibernate 开启事务为何无反应?(已贴代码)

问题描述 问题说明:使用Spring+SpringMVC+Hibernate架构来做个练习的时候,就出错了...按道理说这个问题,只需要配置一个事务就可以了,但是配置了还是出错...求解...===========================================================================新增用户出错=========================================================================

Hibernate Validator 6.0.0.Alpha2 改进对 Bean Validation 2.0 的支持

Hibernate Validator 6.0.0.Alpha2 发布了.Hibernate Validator 6 将成为 Bean Validation 2.0 的参考实现.此 Alpha2 版本与 Bean Validation 规范的 2.0.0.Alpha2 版本协调. 请注意,Hibernate Validator 6 需要 JDK 8 或更高版本. 自 Alpha1 以来的新功能 改进对容器元素验证的支持 Container element validation support i

关于springmvc+hibernate的问题

问题描述 使用springmvc+hibernate用注解配置实体类的时候,我不使用hbm了,完全使用注解的方式不过有些实体类具有外键关系,怎么使用注解配置多对多,一对多的关系,真不知道该怎么写,百度上很难找到这类的信息有哪位大神来解释下呗?另外还有一个关于日期传递的问题代码如下实体类:@Entity@Table(name="user")publicUser{intid;//id在数据库中设置为自增了Stringname;Java.util,Datedate;publicUser(){

Hibernate Validator 4.2.0 Beta1发布 实现方法级别的校验

用Annotations 给类或者类的属性加上约束(constraint),在运行期检查属性值是很优雅的.Hibernate Validator就是这样的一个框架.该框架是十分容易的(就像参考文档中宣称的那样),几乎没有什么学习曲线,Validator 是一个验证框架不需要和Hibernate的其他部分绑定就可以使用,只要在你的项目中添加Hibernate-annotations.jar库就可以了. As announced earlier, the highlight of the 4.2 r