SpringMVC数据校验
一、准备
1.1 校验理解
项目中,通常使用较多的是前端的校验,比如页面中js
校验。对于安全要求较高建议在服务端进行校验。服务端校验有:
- 控制层:校验页面请求的参数的合法性。在服务端校验不区分客户端(pc、手机、远程调用),其校验是一致的。
- 业务层(使用较多):主要校验关键的业务参数,仅限于
service
接口中使用的参数。 - 持久层:一般是不校验的。
1.2 springmvc 校验
-
springmvc
使用hibernate
的校验框架validation
(和hibernate
没有关系)。 -
思路
页面提交请求的参数,请求到Controller
方法中,使用validation
进行校验。如果校验出错,需要将错误信息展示到页面。 -
具体需求
商品修改,添加校验(检验商品名称长度,生成日期的非空校验)如果校验出错,在商品修改页面显示错误信息。
1.3 环境
添加相关校验包:
hibernate-validator-4.3.0.Final.jar jboss-logging-3.1.0.CR2.jar validation-api-1.0.0.GA.jar
1 @RequestMapping(value = "/login",method = RequestMethod.POST) 2 public String Login(Model model, @Valid User user, Errors errors){ 3 if (errors.hasErrors()){ 4 return "login"; 5 } 6 System.out.println(user); 7 model.addAttribute(user); 8 return "success"; 9 }
在需要校验的对象前加上@valid,后面紧跟Errors,用来做校验的错误处理。
1 public class User { 2 @NotNull 3 @Size(min = 3,max = 16) 4 private String username; 5 @NotNull 6 private String password;
校验的对象bean
注解 | 含义 |
---|---|
@Null |
被注释的元素必须为 null |
@NotNull |
被注释的元素必须不为 null |
@AssertTrue |
被注释的元素必须为 true |
@AssertFalse |
被注释的元素必须为false |
@Min(value) |
被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) |
被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) |
被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) |
被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max=, min=) |
被注释的元素的大小必须在指定的范围内 |
@Digits (integer,fraction) |
被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past |
被注释的元素必须是一个过去的日期 |
@Future |
被注释的元素必须是一个将来的日期 |
@Pattern(regex=,flag=) |
被注释的元素必须符合指定的正则表达式 Hibernate Validator 附加的constraint |
@NotBlank(message =) |
验证字符串非null ,且长度必须大于0 |
@Email |
被注释的元素必须是电子邮箱地址 |
@Length(min=,max=) |
被注释的字符串的大小必须在指定的范围内 |
@NotEmpty |
被注释的字符串的必须非空 |
@Range(min=,max=,message=) |
被注释的元素必须在合适的范围内 |