@Validated参数校验
hibernate的校验框架validation所需要jar包:
下载地址: https://download.csdn.net/download/bushqiang/10337270
需要的包:
1.springmvc.xml配置:
<!-- 校验器 --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <!-- hibernate校验器 --> <property name="providerClass" value="org.hibernate.validator.HibernateValidator" /> <!-- 指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用classpath下的ValidationMessages.properties --> <property name="validationMessageSource" ref="messageSource" /> </bean> <!-- 校验错误信息配置文件 --> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- 资源文件名 --> <property name="basenames"> <list> <value>classpath:ValidationMessages</value> </list> </property> <!-- 资源文件编码格式 --> <property name="defaultEncoding" value="UTF-8"/> <!-- <property name="fileEncodings" value="utf-8" /> --> <!-- 对资源文件内容缓存时间,单位秒 --> <property name="cacheSeconds" value="120" /> </bean>
2.校验器注入到处理器适配器中
<mvc:annotation-driven validator="validator"></mvc:annotation-driven>
3.在pojo中添加校验规则
@NotBlank(message = "{userid.NotBlank}") private String username; @NotBlank(message="{userpassword.NotBlank}") private String password;
4.把需要校验信息单独放在一个文件夹下
5.控制层捕获校验错误信息
注意://在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息
//注意:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)。
@RequestMapping("/userLogin") public ModelAndView editItemsSubmit(HttpServletRequest request, Integer id, @Validated User user, BindingResult bindingResult) throws Exception { ModelAndView modelAndView = new ModelAndView(); // 获取校验错误信息 if (bindingResult.hasErrors()) { // 输出错误信息 List<ObjectError> allErrors = bindingResult.getAllErrors(); for (ObjectError objectError : allErrors) { // 输出错误信息 System.out.println(objectError.getDefaultMessage()); } // 将错误信息传到页面 modelAndView.addObject("allErrors", allErrors); // 可以直接使用model将提交pojo回显到页面 modelAndView.addObject("user", user); modelAndView.setViewName("index"); return modelAndView; } // 保存用户注册信息 userService.saveUser(user); // 添加返回的数据 modelAndView.addObject("user", user); // 返回jsp页面的名字 modelAndView.setViewName("successLog"); return modelAndView; }
6.页面显示校验信息
<!-- 显示错误信息 --> <c:if test="${allErrors!=null }"> <c:forEach items="${allErrors }" var="error"> ${ error.defaultMessage}<br /> </c:forEach> </c:if>
二:分组校验,就是对不同的情况下做不同的校验
1.创建校验接口类,里面什么都不要写
2.在pojo中添加分组
3.在控制层的方法使用指定分组的校验
校验的注解:
JSR提供的校验注解: @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提供的校验注解: @NotBlank(message =) 验证字符串非null,且长度必须大于0 @Email 被注释的元素必须是电子邮箱地址 @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内 @NotEmpty 被注释的字符串的必须非空 @Range(min=,max=,message=) 被注释的元素必须在合适的范围内