SpringMVC 之服务端校验(五)

校验理解:

项目中,通常使用较多是前端的校验,比如页面中 js 校验。对于安全要求较高点建议在服务端进行校验。

服务端校验:

         控制层 controller:校验页面请求的参数的合法性。在服务端控制层 controller 校验,不区分客户端类型(浏览器、手机客户端、远程调用)

         业务层 service(使用较多):主要校验关键业务参数,仅限于 service 接口中使用的参数。

         持久层 dao:一般是不校验的。

 

需求:

springmvc 使用 hibernate 的校验框架 validation (和 hibernate 没有任何关系)。
 

校验思路:

    页面提交请求的参数,请求到 controller 方法中,使用 validation 进行校验。如果校验出错,将错误信息展示到页面。

具体需求:

    产品修改,添加校验(校验商品名称长度,生产日期的非空校验),如果校验出错,在产品修改页面显示错误信息。

 

准备 jar 包:

hibernate 的校验框架 validation 所需要 jar 包:

SpringMVC 之服务端校验(五)_第1张图片

配置校验器:

SpringMVC 之服务端校验(五)_第2张图片

 

校验器注入到处理器适配器中

 

在 pojo 中添加校验规则

SpringMVC 之服务端校验(五)_第3张图片

 

CustomValidationMessages.properties:

SpringMVC 之服务端校验(五)_第4张图片

 

捕获校验错误信息:

SpringMVC 之服务端校验(五)_第5张图片

 

editProducts.jsp:

SpringMVC 之服务端校验(五)_第6张图片

 

效果:

 

 

分组校验

需求:

在 pojo 中定义校验规则,pojo 是被多个 controller所共用。当不同的 controller 方法对同一个 pojo 进行校验时,不能让每个 controller 方法完成不同的校验。
 

解决方法:

定义多个校验分组(其实是一个 java 接口),分组中定义有哪些规则;

 

每个 controller 方法使用不同的校验分组。

 

 

分组接口:

SpringMVC 之服务端校验(五)_第7张图片

在校验规则中添加分组:

SpringMVC 之服务端校验(五)_第8张图片

在 controller 方法使用指定分组的校验:

SpringMVC 之服务端校验(五)_第9张图片

 

JSR-303原生支持的限制有如下几种

限制

说明

@Null

限制只能为null

@NotNull

限制必须不为null

@AssertFalse

限制必须为false

@AssertTrue

限制必须为true

@DecimalMax(value)

限制必须为一个不大于指定值的数字

@DecimalMin(value)

限制必须为一个不小于指定值的数字

@Digits(integer,fraction)

限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction

@Future

限制必须是一个将来的日期

@Max(value)

限制必须为一个不大于指定值的数字

@Min(value)

限制必须为一个不小于指定值的数字

@Past

限制必须是一个过去的日期

@Pattern(value)

限制必须符合指定的正则表达式

@Size(max,min)

限制字符长度必须在min到max之间

你可能感兴趣的:(SpringMVC)