Hibernate后台校验与国际化配置

    人总是懒惰的,本来上周在新工作中的开发中遇到了这个问题,恰巧公司没有关于这么方面的封装,而我以前也对后台的数据校验也有所了解和使用,所以就添加了数据校验这方面的服务。工作上周就做完了,但是总结的博客却没有及时去写,ganga~

    好了,每次开题前的废话说完了,现在来说一下关于这次博客的主题-数据校验。大家都知道,考虑到数据的安全性,防止垃圾数据和恶意攻击,保护数据的安全,数据校验是非常有必要的。而数据校验又分为前台校验和后台校验。前台校验主要是从用户的使用体验上去考虑的,反应快,但是安全性较低。而后台校验是数据安全的真正保障。常用的数据后台校验大多放在controller和service层,映射的那里一般是不考虑的。本次采用的是hibernate校验,也是非常常见的校验方式。

    那现在说一下国际化配置吧。我的理解是中英文配置,常见的应用的大家点击一下语言显示,整个网站就可以从全英文表示转换成全中文,或者是全中文表示转换成全英文表示,听起来很厉害,但是我要做的并不是这方面的功能。我要做的单单是 针对整套系统的文字消息的国际化配置,也就是消息的统一管理和配置。对于小型的系统来说,国际化可有可无,但是对于大型的项目,或是经常用来作为其他网站项目的基础架构来说,国际化不可或缺。

    OK,开始正文~

    首先是本次数据校验需要用到的jar包,截图给大家看一下:

                                      

    对应的maven依赖如下:


   这里有对应的三个jar包的下载地址,下载后直接解压就可以了。点击打开链接,如果链接不可用,大家可以去我的CSDN个人中心查看~


   然后在配置文件中加入bean配置,因为后面也要说到国际化配置,这里也顺带把图贴了出来:

扫描二维码关注公众号,回复: 2271880 查看本文章


    这里需要注意的有:

    1.编码格式需要指定与项目使用相同的编码,否则可能会乱码

    2.指定国际化信息配置文件的资源路径,由于已经使用了basenames,所以这里只需要写出多个文件的相同部分就可以了,这里我只配置了中文信息文件,所以只有一个文

件。且bean的id要与ref对应,不然会报错。


    对于数据的格式要求,内容要求,放在pojo类里,使用注解的方式实现。本篇博客只做一个简单的例子---非空校验,具体如下图:

    

    这里的英文配置,针对的是国际化,在下面会进行解释,多个数据格式要求可添加多个注解。同样要注意的是notnull,notblank,notempty三个注解,都有自己对应的数据类

型要求,弄错了是会报错的~

   那这里给大家贴一张各类注解的详细说明

 

    我的后台校验是在controller里添加的,使用的是@Validated注解。获取后台校验的结果使用的是BindingResult,具体如下图:


    对于校验信息的处理,可以选择抛出,也可以获取到具体内容,并在页面上显示出来,而这里就涉及到了spring提供的form前台校验。但是我个人不太习惯这种用法,不过还

是在这里简要说明一下:

    最为简单的方法,是将error信息保存,添加到model里,然后在页面循环展示出来。还有一种是使用spring 的form标签,配置好关联关系,因为主题是后台校验,具体就不细

说了,以后有机会会写一篇关于前台校验的博文。

    到这里,比较简单后台校验就出来了,在项目中也完全可以使用。下面说一下国际化配置:

   关于国际化配置的配置信息已经在上文中贴出来了,只需要按照图配置,即可使用。配置文件我也给大家贴一下:


   properties文件可以看成和Map一样,是依靠键来取值,上文中贴出的pojo类的message信息,大家应该注意到是英文,而它就是我们想要的提示消息的key,通过这个key来

获取中文value。


    需要注意的是,一般在使用大括号时,后面会留有空格,这里最好不要留,可能会出现无法获取到value的尴尬情况。

    我的本来想法是将国际化配置与数据校验(包括后台与前台),异常处理,网站参数等一起融合起来,但是最近除了开发实名认证系统,还要去弄时间戳平台,领导还要求

我搞一个关于数据字典的讲解和培训,实在没有时间,就先放下了。回归正题:

    实际上,在开发中,我们不可能只有一个地方用到后台校验,如添加和修改产品,可能对于PC和移动端,校验的要求也是不同的,这时候就用到了分组校验。指定当前对象

适用于哪种校验,这样就很好的解决了这个问题。在controller里,注解需要稍微修改一下,pojo类添加对应的分组,如下图:



    校验的分组是我们自己校验的,需要说明的是,校验的接口仅仅是作为一个标识,不需要有其他东西,里面空空如也,如添加一个针对新增类的校验分组:


   最后是关于校验的顺序问题,这在实际的开发中也会使用到,但是我并没有去详细了解过,只是大致地百度了一下(写东西没写完整的感觉好难受...),后面有机会我也会把

关于分组的问题了解一下,在实际的开发中使用后,在博客里与大家分享。

   好了,虽然博客不完整,但是到这里也要结束了,大家共勉~

猜你喜欢

转载自blog.csdn.net/postersxu/article/details/78417098