java mac校验_Springmvc数据校验

本文介绍了Java中基于JSR303的Hibernate Validator数据校验框架,包括基本注解和自定义校验规则的使用。同时,详细讲解了如何在SpringMVC中配置和应用校验框架,以及如何处理和展示校验错误,并展示了国际化错误信息的配置方法。
摘要由CSDN通过智能技术生成

本篇要点:

一、JSR303校验框架

二、Hibernate Validator扩展注解类

三、配置和使用SpringMVC校验框架

一、JSR303校验框架

JSR 303 用于对Java Bean 中的字段的值进行验证,使得验证逻辑从业务代码中脱离出来。是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。一般用于表单提交页面(如用户名必填、只能由数字字母组成等等)。

• @NotNull 注解元素必须是非空

• @Null 注解元素必须是空

• @Digits 验证数字构成是否合法

• @Future 验证是否在当前系统时间之后

• @Past 验证是否在当前系统时间之前

• @Max 验证值是否小于等于最大指定整数值

• @Min 验证值是否大于等于最小指定整数值

• @Pattern 验证字符串是否匹配指定的正则表达式

• @Size 验证元素大小是否在指定范围内

• @DecimalMax 验证值是否小于等于最大指定小数值

• @DecimalMin 验证值是否大于等于最小指定小数值

• @AssertTrue 被注释的元素必须为true

• @AssertFalse 被注释的元素必须为false

二、Hibernate Validator扩展注解类

• @Email 被注释的元素必须是电子邮箱地址

• @Length 被注释的字符串的大小必须在指定的范围内

• @NotEmpty 被注释的字符串的必须非空

• @Range 被注释的元素必须在合适的范围内

三、配置和使用SpringMVC校验框架

1.如何配置SpringMVC校验框架

1>.在pom.xml配置jar包依赖:

org.hibernate

hibernate-validator

5.3.0.Alpha1

org.slf4j

slf4j-api

1.7.21

org.slf4j

slf4j-log4j12

1.7.21

2>.在springmvc.xml文件中加入如下一句:

3>.在JavaBean中定义校验规则:

570a8a239b815baf2cd7ccc8f58318b7.png

public class User implementsSerializable {

@NotEmpty(message="用户名不能为空")privateString userName;

@Pattern(regexp="[0-9a-zA-Z]{6,30}",message="密码是6-30个字符,必须是字母或数字组合")privateString password;

@Length(min=2,max=100,message="非法真实姓名")privateString realName;

@Email("请输入正确邮箱地址")privateString email;

@NotNull(message="请填写您的年龄")privateInteger age;

.....

4>.在控制器的方法输入参数中用@Valid注解参数实体

@RequestMapping(value="doRegister",method =RequestMethod.POST)public String doRegister(@Valid User user,......

2.获取校验结果,使用BindingResult result输出错误

@RequestMapping(value="doRegister",method =RequestMethod.POST)publicString doRegister(@Valid User user,BindingResult result,ModelMap map){//如果入参有问题,返回注册页面

if(result.hasErrors()) {

List errorList =result.getFieldErrors();for(FieldError error : errorList){

System.out.println(error.getField()+ "*" +error.getDefaultMessage());

map.put("ERR_" +error.getField(), error.getDefaultMessage());

}return "register";

}//这里省略注册代码

return "registersuccess";

}

校验结果保存在BindingResult或Errors对象中:

• 这两个类都位于org.springframework.validation包中

• 需校验的表单对象和其绑定结果对象或错误对象是成对出现的

• Errors接口提供了获取错误信息的方法,如getErrorCount()获取错误的数量, getFieldErrors(String field)得到成员属性的校验错误列表

• BindingResult接口扩展了Errors接口,以便可以使用Spring的org.springframeword.validation.Validator对数据进行校验,同时获取数据绑定结果对象的信息

3.在JSP页面中显示错误

${ERR_userName }

用户名:

${ERR_password }

密 码:

${ERR_realName }

真实姓名:

${ERR_email }

邮 箱:

${ERR_age }

年 龄:

4.自定义校验规则(可写在net.quickcodes.common中)

1>.定义接口Between.java;

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })

@Retention(RUNTIME)

@Documented

@Constraint(validatedBy= {BetweenValidator.class})//指定校验实现类

public @interfaceBetween {

String message()default "年龄必须在{min}和{max}之间";//错误提示信息

Class>[] groups() default{ };

Class extends Payload>[] payload() default{};int min();//添加的

int max();//添加的

}

2.>.实现接口BetweenValidator.java,需要实现ConstraintValidator接口:

public class BetweenValidator implements ConstraintValidator{private intmin ;private intmax ;

@Overridepublic void initialize(Between annotation) {//初始化参数

min =annotation.min();

max=annotation.max();

}

@Overridepublic boolean isValid(Integer value, ConstraintValidatorContext context) {//校验逻辑

if (value == null) {return false;

}if (value >= min && value <=max) {return true;

}return false;

}

}

3>.在实体字段上应用自定义校验规则

@NotNull(message="请填写您的年龄")

@Between(min=18,max=45)//自定义校验规则

private Integer age;

实现原理:

当User实体的字段上应用了自定义校验规则Between接口时(同时给Between接口的min、max字段赋值),Between接口中指定了校验实现类为BetweenValidator。BetweenValidator实现ConstraintValidator接口时将Between传进去了,所以在BetweenValidator中就可以根据min和max来判断了。

5.国际化错误信息

1>.在src/main/resouces下新建一个i18n的资源文件夹,并新建messages.properties配置文件:

Between.user.age=应该在{min}与{max}之间

Pattern.user.password=密码是6-30个字符,必须是字母或数字组合

Length.user.realName=非法真实姓名

NotEmpty.user.userName=用户名不能为空

Email.user.email=请输入正确的邮件地址

NotNull.user.age=请填写您的年龄

2>.新建messages_zh_CN.properties配置文件:

Between.user.age=应该在{min}与{max}之间

Pattern.user.password=密码是6-30个字符,必须是字母或数字组合

Length.user.realName=非法真实姓名

NotEmpty.user.userName=用户名不能为空

Email.user.email=请输入正确的邮件地址

NotNull.user.age=请填写您的年龄

3>.在/WEB-INF/springmvc.xml中将原来的

改为:

4>.将原来User实体中的错误提示信息改为国际化配置属性即可:

public class User implementsSerializable {

@NotEmpty(message="{NotEmpty.user.userName}")privateString userName ;

@Pattern(regexp="[0-9a-zA-Z]{6,30}", message="{Pattern.user.password}")privateString password ;

@Length(min=2, max=100, message="{Length.user.realName}")privateString realName ;

@Email(message="{Email.user.email}")privateString email ;

@NotNull(message= "{NotNull.user.age}")

@Between(min= 18, max = 45)privateInteger age ;

........

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值