1.自定义表单验证接口
/**
* 自定义验证注解内容
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER,ElementType.FIELD})
@Constraint(validatedBy = FlagValidatorClass.class)
public @interface FlagValidator {
//flag有效值多个使用“,”隔开
String values();
//提示内容
String message() default "flag的值必须为1、2或3";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
2.表单验证实现类
/**
* 自定义验证的的实现类
*/
public class FlagValidatorClass implements ConstraintValidator<FlagValidator, Object> {
//临时变量保存flag值
private String values;
public void initialize(FlagValidator constraint) {
//将注解内配置的值赋给临时变量
this.values=constraint.values();
}
//实现验证
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
//分割定义的有效值
String[] value_array=values.split(",");
boolean isFlag=false;
//遍历比对有效值
for(int i=0;i<value_array.length;i++){
if (value_array[i].equals(value)){
isFlag=true;
break;
}
}
//返回是否存在boolean
return isFlag;
}
public boolean isValid(String obj, ConstraintValidatorContext context) {
return false;
}
}
3.实体类添加注解,BaseEntity为分页代码
@Entity
public class Person extends BaseEntity {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private int id;
@NotBlank
@Length(min = 2,max = 10)
private String name;
@Min(value = 1)
@Max(value = 150)
private Integer age;
@Length(min = 2,max = 20)
private String address;
@FlagValidator(values = "1,2,3")
private String flag;
}
@FlagValidator(value="1,2,3")的意思是flag只能取1,2,3这三个字符,记住,不是数字!
FlagValidator是自定义验证的接口
@NotBlank 非空验证 @Length 长度验证最小最大长度 @Min 最小值 @Max最大值
4.controller层接收参数
@RestController
public class IndexController {
@Autowired
private MessageSource messageSource;
@RequestMapping(value = "/validator")
public String validator(@Valid Person person, BindingResult result){
if (result.hasErrors()){
StringBuffer msg=new StringBuffer();
//获取错误字段集合
List<FieldError> fieldErrors=result.getFieldErrors();
//获取本地local,zh_CN
Locale currentLocal =LocaleContextHolder.getLocale();
//遍历错误字段,获取错误信息
for(FieldError fieldError:fieldErrors){
//获取错误信息
String errorMessage=messageSource.getMessage(fieldError,currentLocal);
//添加到错误消息集合内
msg.append(fieldError.getField()+":"+errorMessage+",");
}
return msg.toString();
}
return "验证通过,"+"名称:"+person.getName()+"年龄:"+"通讯地址:"+person.getAddress();
}
}
表单试验下:
验证有效!