SpringMVC 数据校验
来源:互联网 发布:php sns开源系统 编辑:程序博客网 时间:2024/05/16 02:03
JSR 303 校验框架
- JSR 303 用于对Java Bean 中的字段的值进行验证,使得验证逻辑从业务代码中脱离出来
- 是一个运行时的数据验证框架,在验证之后验证的错误信息会马上返回出来
- 一般用于表单提交页面(如用户名必填、只能由数字字母组成等等)
JSR 303 校验框架的注解类
- @NotNull 注解元素必须是非空
- @Null 注解元素必须是空
- @Digits 验证数字构成是否合法
- @Future 验证是否在当前系统时间之后
- @Past 验证是否在当前系统时间之前(Future & past 都用于标注时间类型)
- @Max 验证值是否小于等于最大指定整数值
- @Min 验证值是否大于等于最小指定整数值
- @Pattern 验证字符串是否匹配指定的正则表达式
- @Size 验证元素大小是否在指定范围之内
- @DecimalMax 验证值是否小于等于最大指定小数值
- @DecimalMin 验证值是否大于等于最小指定小数值
- AssertTrue 被注释的元素必须为True
- AssertFalse 被注释的元素必须为False
- 以上所有注解可以标注在方法、字段、构造函数和方法入参上,当约束被定义在地段上的时候,这个字段的值是通过字段访问策略来获取并验证的,也就是说Bean Validation的实现者会直接访问这个实例变量,而不会调用属性的getter方法,除此之外,静态字段或者属性不会被校验。
Hibernate Validator 扩展注解类
- @Email 被注释的元素必须是电子邮箱地址
- @Length 被注释的字符串的大小必须在指定范围内
- @NotEmpty 被注释的元素必须是非空的
- @NotBlank 被注释的元素必须是非空的,并且长度要大于0
- @Range 被注释的元素必须在合适的范围内,中有两个属性 Max 和 Min
Hibernate Validator Maven 依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.5.Final</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
Hibernate Validator 示例
@NotBlank(message = “用户名不能为空")
private String username;
@Email(message = “邮箱格式不正确")
private String email;
@Range(min = 18,max = 40,message = “年龄必须在18-40岁之间")
private int age;
@Length(min = 2,max = 10,message = “真实姓名长度必须在2-10之间")
private String realName;
配置和使用 Spring MVC 校验框架
- 如何配置Spring mvc 校验框架
- 在/WEB-INF/spring-mvc.xml中进行配置
- <mvc:annotation-drive validator="validator”/>
- 在/WEB-INF/spring-mvc.xml中进行配置
- 如何获取校验结果
- 在Java Bean中进行设置,例:
- public class User implements Serializable {
- @NotEmpty(message = "用户名不能为空")
- private String userName;
- … …
- }
- 在 Controller 中配置
- @RequestMapping("/doRegister")
- public String doRegister(@Valid User user,BindingResult result,ModelMap map) {
- // 如果入参有问题,返回注册页面
- if (result.hasErrors()){
- List<FieldError> errorList = result.getFieldErrors();
- for (FieldError e : errorList){
- map.put(“ERR_”+e.getField(),e.getDefaultMessage());
- }
- return “register.jsp”;
- }
- ……
- return “success.jsp”;
- }
- 检验结果的入参保存在BindingResult或者Errors对象中,这两个类都位于:org.springframework.validation包中
- 需校验的表单对象和其绑定结果对象或错误对象都是成对出现的
- Errors 接口提供了获取错误信息的方法,如 getErrorCount() 获取错误的数量,getFieldError(String field) 得到成员属性的校验错误列表
- BindingResult 类扩展了 Errors 接口,以便可以使用 Spring 的 org.springframework.validation 对数据进行校验,同时获取绑定结果对象的信息
- 在Java Bean中进行设置,例:
- 在 JSP 页面中显示错误
- 使用JSTL表达式展示错误信息
- 国际化错误信息
- 在 class 目录下新建一个i18n的文件夹,并新建message.properties和messages_zh_CN.properties文件
- 在 spring-mvc.xml中配置国际化信息
- <bean id=“validator” class=“org.springframework.validation.beanvalidation.LacalValidationFactoryBean">
- <property name=“validationMessageSource” ref=“messageSource”/>
- </bean>
- <bean id=“messageSource” class=“org.springframeworl.context.support.ResourceBundleMessageSource” p:basename=“i18n/message” />
- 自定义校验规则
- 定义一个注解类,并使用Constraint注解标注,属性validatedBy指定校验实现类
- @Taeget({METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
- @Retention(RUNTIME)
- @Documented
- @Constraint(validatedBy = {BetweenValidator.class})
- public @interface Between{
- String message() default “Between.user.age”;
- Class<?>[] groups() default {};
- Class<? extends PayLoad>[] payLoad() default {};
- int min;
- int max;
- }
- 定义实现类,需要集成ConstraintValidator接口,isValid方法负责校验
- public class BetweenValidator implements ConstraintValidator<Betweed,Integer> {
- private int max;
- private int min;
- @Override
- public boolean isValid(Integer value,ConstraintValidatorContext context) {
- if (value == null){
- return false;
- }
- if (value >= min && value <= max) {
- return true;
- }
- return false;
- }
- }
- 定义一个注解类,并使用Constraint注解标注,属性validatedBy指定校验实现类
0 0
- springmvc的数据校验
- SpringMVC 数据校验
- SpringMVC 数据校验
- SpringMVC的数据校验
- SpringMVC数据校验
- SpringMVC数据校验
- springmvc中的数据校验
- SpringMVC数据校验
- SpringMVC的数据校验
- SpringMVC数据校验
- SpringMVC数据校验(三)
- springmvc数据校验
- 三.SpringMVC 数据校验
- SpringMVC中的数据校验
- SpringMVC中的数据校验
- SpringMvc之数据校验
- springmvc中数据校验
- SpringMVC(六)数据校验
- 【工资模块】“代扣税”不能参与其他工资项目计算问题
- 【工资模块】无法设置汇总工资类别权限
- 【工资模块】复制工资分摊设置
- Excel-根据身份证号自动生成出生日期
- UNIX_C 链表贪吃蛇游戏_吃苹果可生长代码——<.h头文件>
- SpringMVC 数据校验
- win7专业版安装SQL2008
- 在unity中用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放
- 890客户端无法连接服务器一例
- unlink函数
- 【用友凭证打印】自定义纸张尺寸对照表
- 如何使用JavaScript调用android原生代码,android原生代码调用JavaScript
- Win2003 企业版支持大内存
- 【T3】凭证记账后仍能修改现金流项目