`

java国际化之(四)--- hibernate-validator国际化表单验证

阅读更多

概述

 

上一篇通过Spring MVC+Freemaker整合一个国际化实现demo,同时demo里还整合了Spring MVC自带的bean验证Validator,需要自己去实现验证逻辑。本篇主要内容Spring MVC+hibernate-validator bean实现国际化表单验证,相关代码已上传Githut,地址见文章结尾。

 

hibernate-validator 验证框架整合

 

提到bean验证,不得不说下JSR bean validation规范(JSR303JSR349),这个规范只是定义了对象属性约束说明,没有具体实现。hibernate-validator就是实现了这个规范的框架之一,另外bean validation 1.1JSR349进行了实现,但据说还不够稳定。2016年中bean validation 2.0发布,发布说明:http://beanvalidation.org/news/2016/07/15/bean-validation-2-0-is-coming/。相对而言hibernate-validator更成熟,这里采用hibernate-validator进行demo搭建(版本5.2.4.Final)。

 

采用hibernate-validator验证框架比spring mvc自带的验证框架好用,首先不需要自己实现验证逻辑,hibernate已经帮我们实现了;其次hibernate-validator验证框架可以完全基于注解,使用更加方便灵活。

 

首先看下JSR303约束注解标签,以及基本用法:

 

 

 

按照以上讲解的注解格式,为上一章的User类中需要验证的字段进行相应注解添加(在上一章的代码里进行修改):

/**
 * Created by gantianxing on 2017/6/8.
 */
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
 
    @NotNull
    @Size(min=2,max = 5)
    private String name;//姓名
 
    @NotNull
    @Past
    private Date birthday;//生日
 
    @NotNull
    @Digits(integer=3,fraction=2)
    private BigDecimal money;//资产
 
    @NotNull
    @Pattern(regexp="\\d{11}")
    private String phoneNum;//手机号
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Date getBirthday() {
        return birthday;
    }
 
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
 
    public BigDecimal getMoney() {
        return money;
    }
 
    public void setMoney(BigDecimal money) {
        this.money = money;
    }
 
    public String getPhoneNum() {
        return phoneNum;
    }
 
    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }
}

 

具体注解含义就不解释了,根据上面的规则讲解,一目了然。

启动tomcat,访问http://localhost/add,如下:



 

 

每个字段都不填写值,直接点击添加按钮:



 

 

切换化到英文:


 
 

可以看到验证框架,有一套自己默认的错误提示信息,并且已经支持了国际化(这里我只试了中文和英文)。

 

整合国际化配置文件

 

一般情况下你对默认的错误提示信息会不满意,别紧张,Spring MVC可以很好的把hibernate-validator验证器与国际化配置整合起来。整合分三步:

 

第一步:首先我们要修改User类的注解,把错误消息的key指定为国际化属性配置文件中的key,如下:

public class User implements Serializable {
    private static final long serialVersionUID = 1L;
 
    @NotNull(message="{user.name.null}")
    @Size(min=2,max =5,message = "{user.name.error}")
    private String name;//姓名
 
    @NotNull(message="{user.birthday.null}")
    @Past(message="{user.birthday.error}")
    private Date birthday;//生日
 
    @NotNull(message="{user.money.null}")
    @Digits(integer=3,fraction=2,message="{user.money.error}")
    private BigDecimal money;//资产
 
    @NotNull(message="{user.phoneNum.null}")
    @Pattern(regexp="\\d{11}",message="{user.phoneNum.error}")
    private String phoneNum;//手机号
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Date getBirthday() {
        return birthday;
    }
 
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
 
    public BigDecimal getMoney() {
        return money;
    }
 
    public void setMoney(BigDecimal money) {
        this.money = money;
    }
 
    public String getPhoneNum() {
        return phoneNum;
    }
 
    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }
}

 

 

第二步:再修改spring-mvc.xml配置文件,整合hibernate-validator验证器与国际化配置:

 

<mvc:annotation-driven validator="validator" conversion-service="formatService" />
 
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass"  value="org.hibernate.validator.HibernateValidator"/>
        <!--指定国际化配置文件 不设置则默认为classpath下的 ValidationMessages.properties -->
        <property name="validationMessageSource" ref="messageSource"/>
    </bean>
<!-- formatter转换配置 -->
    <bean id="formatService"
          class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="formatters">
            <set>
                <bean class="com.sky.locale.demo.formatter.MyDateFormatter" />
                <bean class="com.sky.locale.demo.formatter.MyCurrencyFormatter" />
            </set>
        </property>
</bean>
 
<!-- 国际化资源文件 -->
    <bean id="messageSource"
          class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames" >
            <list>
                <value>/WEB-INF/resource/usermsg</value>
                <value>/WEB-INF/resource/userlabels</value>
            </list>
        </property>
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>

 

 

第三步:在属性配置文件中添加自定义的国家化消息,在中文usermsg_zh_CN.properties配置中添加:

user.name.null=请输入用户名
user.name.error=用户名长度必须在{min}到{max}之间
user.birthday.null=请输入生日
user.birthday.error=生日必须小于当前时间
user.money.null=请输入资产
user.money.error=资产不能超过1000000
user.phoneNum.null=请输入手机号
user.phoneNum.error=手机号必须为11位

 

在英文配置文件usermsg_en_GB.properties中添加:

user.name.null=Please enter a name
user.name.error=name length must between{min} and {max}
user.birthday.null=Please enter a birthday
user.birthday.error=birthday is a past time
user.money.null=Please enter a money
user.money.error=money < 1000000
user.phoneNum.null=Please enter a phoneNum
user.phoneNum.error=phoneNum length is 11

 

ok, 修改完毕,重新启动tomcat,访问http://localhost/add,不填写任何字段,提交表单,显然如下:



 

 

切换到英文(ps:如果切换不成功,tomcat版本请换成tomcat8以上),再次提交表单:



可以看到结果是我们想要的,hibernate-validator验证器与Spring MVC国际化配置整合完成。以上示例代码详见Github地址:https://github.com/gantianxing/locale-demo1.git

 

 

 

  • 大小: 76.8 KB
  • 大小: 8.2 KB
  • 大小: 13.3 KB
  • 大小: 19.7 KB
  • 大小: 14.7 KB
  • 大小: 20.1 KB
0
1
分享到:
评论

相关推荐

    hibernate-validator-4.0.1.GA-dist

    1. Web 应用:在 MVC 框架(如 Spring MVC)中,Hibernate Validator 可以与 Model 属性结合,实现前端表单提交数据的验证。 2. RESTful API:验证 JSON 请求参数的有效性,保证服务接口的健壮性。 3. 业务逻辑:...

    hibernate-validator-5.2.2

    在实际开发中,Hibernate Validator常用于Web表单验证、服务层的数据校验以及数据库操作前的数据预处理。例如,你可以这样做: ```java public class User { @NotNull(message = "用户名不能为空") private ...

    hibernate-validator-6.1.2.Final-dist.zip

    3. 国际化:Hibernate Validator支持多语言的错误消息,方便根据不同地区展示不同的错误提示。 4. 组验证:允许对一组相关的验证注解进行分组,根据业务逻辑选择执行特定的验证组。 三、使用 Hibernate Validator ...

    hibernate-validator-5.4.0.Final-dist.zip

    1. **表单验证**:在Web应用中,对用户提交的数据进行前端和后端双重验证。 2. **服务层验证**:在服务调用之间,确保输入数据的合法性和一致性。 3. **数据持久化**:在对象保存到数据库之前,先进行验证,避免...

    hibernate-validator-cdi-5.1.0.Final.zip

    当结合Hibernate Validator使用时,可以在CDI上下文中轻松地进行验证操作,比如在处理用户表单提交时,可以直接在服务层或者控制器层利用验证注解进行数据校验。 在这个5.1.0.Final版本中,可能包含了如下内容: 1....

    hibernate-validator-5.2.1.Final-dist

    2. Web表单验证:在Web应用中,结合前端框架,如AngularJS或Vue.js,可以在客户端和服务器端同时进行数据验证,提高用户体验。 3. 服务端验证:在RESTful API开发中,验证请求参数的有效性,防止非法数据的注入,...

    hibernate-validator-reference4.2final

    与Spring框架的无缝集成,允许在Spring MVC中直接使用Hibernate Validator进行表单验证,简化了控制器的代码。 六、性能优化 4.2.0.Final版本对性能进行了优化,提升了大规模验证场景下的效率,并且增加了对CDI...

    hibernate-validator

    总结来说,Hibernate Validator 是一个强大且灵活的验证工具,它简化了 Java 应用中的数据验证过程,提高了代码质量,降低了潜在的错误风险。熟练掌握 Hibernate Validator,可以让你的 Java 应用更加健壮和安全。

    hibernate-validator示例demo

    用户填写的表单数据以JSON格式发送到服务器,`SpringMVC`的`@RequestBody`注解将JSON数据转换为Java对象,`Hibernate Validator`自动进行验证,如果验证失败则返回错误信息,否则继续处理业务逻辑。`Fastjson`在这里...

    基于hibernate_validator的异步表单校验框架依赖文件

    总结来说,基于Hibernate Validator的异步表单校验框架能够帮助开发者高效、灵活地实现数据验证,提升用户体验,同时保持代码的整洁和模块化。正确地使用这个框架,可以避免因为数据验证问题而导致的各种异常情况,...

    hibernate_validator 官方参考文档

    综上所述,Hibernate Validator作为Java领域内领先的验证框架,不仅提供了丰富的内置约束,还支持高度定制化的自定义约束,同时与众多生态系统中的其他框架紧密集成,使得数据验证变得更加简单、高效且强大。...

    结合SpringMVC和Hibernate-validator,自动生成前台的js验证代码.docx

    总结起来,结合SpringMVC和Hibernate-validator,利用自定义JSP标签库可以自动化生成前端JavaScript验证代码,提升开发效率,降低出错概率,提供更优的用户体验。这一技术在实际项目中非常实用,值得在开发过程中...

    hibernate验证框架学习

    通过以上内容的学习,我们可以看到 **Hibernate Validator** 提供了丰富的功能和高度可定制化的验证能力,非常适合于各种规模的 Java 应用程序开发。无论是简单的数据类型验证还是复杂的业务逻辑验证,都能够轻松...

    java表单的验证

    Java作为服务器端的主要编程语言之一,在处理前端表单验证时有着丰富的工具和技术。 #### 二、表单验证的重要性 1. **数据完整性**:确保提交的数据是完整且有效的。 2. **用户体验**:减少用户因输入错误而导致的...

    JSR303依赖的jar包

    Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。 该压缩包包含了hibernate-validator-5.2.4.Final.jar、hibernate-validator-annotation-processor-5.2.4.Final.jar、...

    commons-validator-1.7-bin.tar.gz

    它支持多种验证场景,如Web表单验证、XML数据验证等。在`commons-validator-1.7-bin.tar.gz`这个压缩包中,包含了Validator的1.7版本的所有相关文件,便于开发者下载和使用。 首先,我们来了解Validator的核心组件...

    Struts Hibernate Spring 集成开发宝典 validator

    Validator规则可以通过XML配置文件或注解进行定义,可以自定义错误消息,提供了一种灵活且可扩展的方式来处理表单验证。 在实际的集成开发过程中,Struts负责处理用户请求并控制流程,Hibernate处理数据库操作,...

    hibernate validator组件

    在实际开发中,Hibernate Validator 可以广泛应用于Web表单验证、业务逻辑校验等场景,有效避免因无效数据引发的程序错误。通过合理使用和自定义验证规则,可以提高代码质量,减少bug,提升用户体验。同时,其良好的...

Global site tag (gtag.js) - Google Analytics