4

我有以下豆子

public class MyModel {
  @NotNull
  @NotEmpty
  private String name;

  @NotNull
  @NotEmpty
  private int age;

  //how do you validate this?
  private MySubModel subModel;
}

public class MySubModel{

  private String subName;

}

然后我使用 @Valid 注释从控制器端验证这一点。

谢谢

4

2 回答 2

4

您可以使用 Bean Validation (JSR-303) 定义自己的自定义验证,例如这里是简单的自定义邮政编码验证,通过使用自定义注释进行注释,您可以轻松验证:

@Documented
@Constraint(validatedBy = ZipCodeValidator.class)
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ZipCode {
    String message() default "zip code must be five numeric characters";

    Class<?>[] groups() default {};

    Class<?>[] payload() default {};
}

和自定义验证类,而不是,你可以使用你的自定义 bean,比如<YourAnnotationClassName,TypeWhichIsBeingValidated>

public class ZipCodeValidator implements ConstraintValidator<ZipCode, String> {

    @Override
    public void initialize(ZipCode zipCode) {
    }

    @Override
    public boolean isValid(String string, ConstraintValidatorContext context) {
        if (string.length() != 5)
            return false;
        for (char c : string.toCharArray()) {
            if (!Character.isDigit(c))
                return false;
        }
        return true;
    }

}

这是它的用法:

public class Address{

  @ZipCode
  private String zip;

}
于 2013-05-13T00:36:08.583 回答
4

你可以试试这个:

public class MyModel {

    @NotNull
    @NotEmpty
    private String name;

    @NotNull
    @NotEmpty
    private int age;

    // how do you validate this?
    private MySubModel subModel;

    @NotNull
    @Size(min=5, max=10)
    public String getSubModelSubName() {
        return subModel == null ? null : subModel.getSubName();
    }
}

另一种可能性是将 @Valid 注释与您的内部 bean 一起使用。例如:

public class MySubModel{

  @NotNull
  @Size(min=5, max=10)
  private String subName;

}

然后,您必须像这样编写主类:

public class MyModel {

    @NotNull
    @NotEmpty
    private String name;

    @NotNull
    @NotEmpty
    private int age;

    // how do you validate this?
    @Valid
    private MySubModel subModel;

}

我正在使用 Spring Boot 1.2.5

于 2015-10-24T09:22:01.800 回答