首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证Bean中的Bean

验证Bean中的Bean
EN

Stack Overflow用户
提问于 2013-05-13 07:50:44
回答 2查看 1.1K关注 0票数 4

我有以下的豆子

代码语言:javascript
复制
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注解从控制器端验证这一点。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-05-13 08:36:09

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

代码语言:javascript
复制
@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 {};
}

和自定义验证类,您可以使用像<YourAnnotationClassName,TypeWhichIsBeingValidated>这样的自定义beans来代替

代码语言:javascript
复制
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;
    }

}

下面是它的用法:

代码语言:javascript
复制
public class Address{

  @ZipCode
  private String zip;

}
票数 4
EN

Stack Overflow用户

发布于 2015-10-24 17:22:02

您可以尝试这样做:

代码语言:javascript
复制
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();
    }
}

另一种可能是在内部bean中使用@Valid注释。例如:

代码语言:javascript
复制
public class MySubModel{

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

}

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

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16513179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档