SpringMVC使用数据校验,JavaBean中属性类型必须为String
//验证数据类型为Email类型,也可以自定义Email格式@Email(regexp=正则表达式,message=验证错误返回的提示)
@Email
private String email;
//自定义验证格式,最常用的模式
@Pattern(regexp="1|2|3|4|5",message="存款年限为1-5年")
private String duration;
//界面对校验做出反应
public class DepositController {
@RequestMapping("deposit")
public String deposit(@Valid DepositBean depositBean,BindingResult bindingResult,ModelMap map) {//获取数据检验结果@Valid必须放在最前面,BindingResult bindingResult必须紧接着数据检验的类的参数
//判断数据校验结果
if(bindingResult.hasErrors()) {
//打印数据校验失败结果
System.out.println("数据校验失败数量:"+bindingResult.getErrorCount());
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
for (FieldError err : fieldErrors) {
System.out.println(err.getField());
System.out.println(err.getDefaultMessage());
//将错误信息以键值对形式保存到ModelMap中,发送到界面
map.addAttribute(err.getField(), err.getDefaultMessage());
}
return "Deposit";
}
return "DepositSuccess";
}
}
//自定义验证注解
@PhoneNo
private String phone;
创建一个SpringMVC注解的接口:PhoneNo
@Target({METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy= {PhoneNoValidator.class})
public @interface PhoneNo {
String message() default "手机号码格式错误";
Class<?>[] groups() default{};
Class<? extends Payload>[] payload() default {};
@Target({FIELD,METHOD,PARAMETER,ANNOTATION_TYPE})
@Retention(RUNTIME)
@Documented
@interface List{
PhoneNo[] value();
}
}
//创建一个类实现ConstraintValidator<PhoneNo(注解名), String(必须为String)>
public class PhoneNoValidator implements ConstraintValidator<PhoneNo, String> {
@Override
public void initialize(PhoneNo arg0) {
}
@Override // 参数phoneNo为需要校验的数据
public boolean isValid(String phoneNo, ConstraintValidatorContext context) {
if (phoneNo==null||phoneNo.isEmpty()) {
return false;
}
//正则表达式
if (phoneNo.matches("((\\+86)|(86))?1[3|4|5|7|8|9]\\d{9}")) {
return true;
}
return false;
}
}