SpringMVC 案例六:请求参数验证

SpringMVC 案例六:请求参数验证

  1. 导入jar包
    说明:
    1)JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 6.0 中
    2)Spring 本身并没有提供 JSR303 的实现,所以必须将 JSR303 的实现者的 jar 包放到类路径下
    3)Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解
    4)Spring 的 LocalValidatorFactroyBean 既实现了 Spring 的 validator 接口,也实现了 JSR 303 的 Validator 接口。只要在 Spring 容器中定义了一个 LocalValidatorFactoryBean,即可将其注入到需要数据校验的 Bean 中
    5) 会默认装配好一个 LocalValidatorFactoryBean,通过在处理方法的入参上标注 @Validated 注解即可让 Spring MVC 在完成数据绑定后执行数据校验的工作

<dependency>
    <groupId>org.hibernategroupId>
    <artifactId>hibernate-validatorartifactId>
    <version>5.4.1.Finalversion>
dependency>

<dependency>
    <groupId>javax.validationgroupId>
    <artifactId>validation-apiartifactId>
    <version>1.1.0.Finalversion>
dependency>

<dependency>
    <groupId>org.jboss.logginggroupId>
    <artifactId>jboss-loggingartifactId>
    <version>3.3.1.Finalversion>
dependency>

<dependency>
    <groupId>com.fasterxmlgroupId>
    <artifactId>classmateartifactId>
    <version>1.3.3version>
dependency>
  1. 设置验证内容
    1)在处理器方法的形参上,对要验证的POJO参数加上@Valid或@Validated注解
    (@Validated User user,BindingResult result)
    2)添加验证注解表示在对参数绑定时进行校验,校验信息写入BindingResult中,在要校验的pojo后边添加BindingResult,一个BindingResult对应一个pojo,且BindingResult放在pojo的后边
  2. 在pojo对象的属性上添加验证规则注解
public class User {
	private Integer id;
	@NotBlank
	private String username;
	@NotNull
	@Length(min=3)
	private String password;
	...
}
  1. 在处理器方法中,检查是否有校验错误,如果有,把错误添加到model中
@RequestMapping("login")
public String login(@Validated User user,BindingResult result,Model model) {
	if(result.hasErrors()) {
		model.addAttribute("errors", result.getFieldErrors());
		return "forward:/login.jsp";
	}
}

说明:
1)使用boolean result.hasFieldErrors() 或 boolean result.hasErrors()方法判断是否有校验错误
2)getFieldErrors():得到所有字段错误
5. 在jsp页面中显示错误消息

<c:forEach items="${ errors }" var="error">
	${ error.defaultMessage }
c:forEach>
  1. 验证注解:
    1)JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解指定校验规则,并通过标准的验证接口对 Bean 进行验证
    @Null 被注释的元素必须为 null
    @NotNull 被注释的元素必须不为 null
    @AssertTrue 被注释的元素必须为 true
    @AssertFalse 被注释的元素必须为 false
    @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 ,value为long类型
    支持的类型:
    •BigDecimal
    •BigInteger
    •byte, short, int, long, 和它们的包装类
    @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    @DecimalMin(value) 被注释的元素必须是一个数字(或可转换为数字的字符序列),其值必须大于等于指定的最小值 ,value为字符串形式
    支持的类型:
    •BigDecimal
    •BigInteger
    •CharSequence(@Min不支持)
    •byte, short, int, long, 和它们的包装类
    @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    @Size(max=, min=) 被注释的元素的大小必须在指定的范围内
    @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
    integer:整数部分长度
    fraction:小数部分长度
    说明:若果为字符串,也必须能转化为数字的字符串,否则验证失败
    @Past 被注释的元素必须是一个过去的日期(与虚拟机当前日期相比)
    @Future 被注释的元素必须是一个将来的日期
    @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
    例:@Pattern(regexp="^\d{3,}$",message=“密码最少为3位”)
    private String password;
    2)Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解
    @NotBlank(message =)
    1)验证的对象:CharSequence子类型
    2)验证注解的元素值不为空(不为null、去除尾部空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的尾部空格
    @Email 被注释的元素必须是电子邮箱地址
    @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
    @NotEmpty
    1)验证的对象:CharSequence子类型、Collection、Map、数组
    2)验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
    @Range(min=,max=,message=) 被注释的元素必须在合适的范围内

你可能感兴趣的:(其他框架)