Tag: bean validation

如何在ConstraintValidator中自动assembly服务

我正在使用Spring MVC编写我的应用程序。 我想validation用户注册时是否存在数据库中的电子邮件。 我编写了自己的注释约束,名为UniqueEmail 。 我的用户实体User.java : @Entity @Table(name=”users”) public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(name = “email”, length = 100, nullable = false, unique = true) @NotEmpty @Email @UniqueEmail(message = “E-mail is not unique”) private String email; @Column(name = “password”, nullable = false) @NotEmpty @Size(min = 5, message = […]

如何在struts2中使用@Valid注释触发validation?

我无法在hibernate,struts2 webapp中使@javax.validation.Valid注释工作。 这是我的简单实体与约束: import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; @Entity @Table(name = “user”) public class User implements Serializable { @Id @GeneratedValue @Column(name = “user_id”) private Long id; @NotEmpty @Length(max = 50, min = 3, message = “Name should be not less 3 and not more 50”) @Column(name = “name”, nullable = false) private String name; @Length(min = […]

Bean Validation Groupinheritance不适用于Group Sequence Provider

我目前正致力于实现一个存储包含国内和国内地址的联系信息的应用程序,但也可以禁用地址。 我试图定义三个validation组:一个用于始终validation信息的超级组和两个用于不同地址状态的子类。 public interface ContactValidation {} public interface DomesticValidation extends ContactValidation {} public interface ForeignValidation extends ContactValidation {} 然后我在联系人类上定义了一个@GroupSequenceProvider。 public class ContactGroupSequenceProvider implements DefaultGroupSequenceProvider { @Override public List<Class> getValidationGroups(Contact contact) { List<Class> defaultGroupSequence = new ArrayList<Class>(); if(contact.getIsForeign()){ defaultGroupSequence.add(Contact.ForeignValidation.class); } else { defaultGroupSequence.add(Contact.DomesticValidation.class); } //TODO: Add Address Disabled Case defaultGroupSequence.add(Contact.class); //Get a GroupDefinitionException without this line […]

有没有办法从Bean Validation字段级ConstraintValidator中访问目标bean?

除了使用类级validation之外,还有一种方法可以从validation器类中访问字段级validation注释的父bean吗? 例如: public class CustomValidator implements ConstraintValidator { @Override public void initialize(final CustomValidation constraintAnnotation) { } @Override public boolean isValid(final String fieldValue, final ConstraintValidatorContext context) { // is there a way to access the parent object here? } }

更新(合并)时缺少Spring Data JPAvalidation

我正在使用Spring Data JPA的Spring boot 1.5.4.RELEASE开发项目。 问题是在更新实体时没有执行Hibernatevalidation器,或者至少在某些情况下它没有validation。 对于像下面这样的人 ,禁止使用空名称和技能集合必须具有最小1个元素和最大5个。在Spring Data存储库的调用保存期间,它们都被validation。 但是,对于已存在的实体的呼叫保存,它将仅validation名称的约束 – 并且不会检查技能。 @Entity public class Person { @Id @GeneratedValue private Long id; @NotBlank private String name; @ElementCollection(fetch = FetchType.EAGER) @Size(min = 1, max = 5) private Set skills = new HashSet(); protected Person() { } public Person(final String name, final Collection skills) { this.name = […]

方法上的Beanvalidation

public class Register { @NotNull private String password; @NotNull private String passwordRepeat; @AssertTrue private boolean comparePasswords() { return password.equals(passwordRepeat); } private Set<ConstraintViolation> violations; public void doRegister(AjaxBehaviorEvent event) { Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); violations = validator.validate(this); if(violations.isEmpty()) { // This occurs } } } 如果我的密码都不为空,我的validation将通过,但它们是不同的。 似乎最后的约束似乎不会被考虑在内,尽管我不知道为什么。 有没有人有建议? 不,我不是在寻找@Matches或simular自定义validation器的任何实现。 我只想解决这个问题。 提前致谢。 更新1 我已经对此进行了一些测试,希望结果将提供所需的信息。 Bean.java @Named @RequestScoped public […]

java / beans validation – collection / map不包含空值

有@NotNull注释validation某个对象不为null。 有@NotEmpty注释,用于validation某个collection / map / string / …不为空。 是否还有一个注释,表明某个集合/映射不包含任何空值? 我无法找到它。 看起来很基本,我相信它必须符合JSR-303规范。

JSR303 – 应用按顺序定义的所有validation组

我有一个我想要进行条件validation的bean。 为此,我定义了一个DefaultGroupSequenceProvider ,它返回要validation的组列表。 现在,在validation违反序列中多个组中的约束的对象时,只有第一个有失败的组才会返回结果。 我想在所有违规行为中收到错误,而不仅仅是第一组失败的错误。 我认为这不需要代码示例,但如果我错了,我会乐意提供一个。 我在创建序列时遵循了这个http://kh-yiu.blogspot.com/2014/04/conditional-bean-validation-using.html 。 如果重要,我们使用Spring。 只是注意,这是有效的,因为无效的bean不可能被报告为有效。 但是如果用户有一些输入打破3个约束,并且我返回2个失败,则用户将在第一个字段被修正后立即在最后一个字段上获得另一个失败。 不完全是用户友好的。 例: 豆 @GroupSequenceProvider(BeanSequenceProvider.class) public class MyBean { @NotEmpty private String name; @NotNull private MyType type; @NotEmpty(groups = Special.class) private String lastName; // Getters and setters } 枚举类型 public enum MyType { FIRST, SECOND } 提供商 public class BeanSequenceProvider implements DefaultGroupSequenceProvider { @Override public […]

从jsr-303自定义validation器访问数据库

我在我的应用程序上下文中使用基于弹簧的validation与hibernatevalidation器结合使用以下内容: …. 我已经实现了一个访问数据库的自定义validation器,以使用弹簧注入的DAO检查特定对象的有效性约束。 这会导致java.lang.StackOverflowError,因为每次从validation器中从数据库加载对象时都会调用validation,从而导致无限循环。 为了解决这个问题,我尝试在我的实体管理器上设置刷新模式,使用以下代码在validation器中提交: entityManager.setFlushMode(FlushModeType.COMMIT); 这导致hibernate的“集合不通过flush()处理”exception。 是否有一个从自定义validation器访问数据库的最佳实践示例,这将允许我解决这两个问题?

交叉字段validation(JSR 303)问题

我有一个简单的bean,即: public class MyBean { private boolean selected; private String someString; … } 因此,如果selected为true,我希望someString为@NotNull等。 任何提示,链接如何实现这种行为? 谢谢Jonny