在实际开发项目中,为了系统了稳定性,鲁棒性,安全性等等等等。我们需要对数据进行检验剔除,非法的,或格式错误的数据。
一般有两种选择,可以在前端进行校验,或者在后端进行校验。
然而对于安全性较高要求建议在服务器进行检验。所以今天我主要记录分享后端校验的方法。
在后端进行检验,也分多种情况。controller层,service层,和dao层。
控制层:
检验页面请求的参数的合法性,在服务器控制层controller检验,不区分客户端类型(浏览器,手机客户端)。
业务层(service层):这也是使用最多的,主要校验关键业务参数,仅限于service接口中使用的参数。
持久层:一般不校验。
校验思路:
页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。
是使用validation检验,要先引入三个JAR包。
配置校验器
将校验器注入到处理器适配器中
举个在Controller中使用校验的栗子!
首先确认你要检验的对象,这里以Items为例
在Items类中
@Size是字符长度检验,在本例中允许商品名称在1~30字符之间。如果违法这个规定的话,将会输出输出错误配置文件当中的信息。
@Null为非空检验
在controller中,对需要进行校验的对象加上@Validated注解,BindingResult 接收校验出错的信息。
分组检验
什么是分组检验呢?为啥需要分组校验?
假设有这样一种需求
一个pojo被多个controller所共用,当不同的controller方法对同一个pojo进行检验。
不同的controller对pojo检验需求是不同的。比如name长度,有的的contoller可以是1~30字符,有controller允许0个字符。
在这种情况下,就需要定义多个分组检验。
其实就是定义不同的java接口,通过接口来区分不同的分组。
public interface ValidGroup1{
//接口中不需要定义任何方法,仅是对不同的校验规则进行分组
}
@Size(min=1,....,group={ValidatedGroup1.class})
在controller使用指定分组的校验
@Validated(value{ValidGroup1.class})
这样不同的controller通过不同的分组,使用不同的检验。