Springboot validator表单验证以及自定义表单验证

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();
    }
}

表单试验下:

验证有效!

猜你喜欢

转载自blog.csdn.net/xuxin132133/article/details/83617429