在某些情况下如何允许忽略javax.validation
给定以下类在某些情况下如何允许忽略javax.validation,java,hibernate,validation,Java,Hibernate,Validation,给定以下类 public class Website { @NotNull String owner: @ValidUrl String url; } 当我们验证该约束时(例如,使用@Valid),如果Website.url不遵守我的自定义@validul约束,我们将得到一个约束冲突(例如,“url不可访问”) 我想知道如果用户愿意,是否可以忽略该验证 步骤: 第一次验证表单 抛出约束冲突并将其显示给用户 用户选择“我知道,无论如何都要添加”并重新提交 第
public class Website {
@NotNull
String owner:
@ValidUrl
String url;
}
当我们验证该约束时(例如,使用@Valid),如果Website.url不遵守我的自定义@validul约束,我们将得到一个约束冲突(例如,“url不可访问”)
我想知道如果用户愿意,是否可以忽略该验证
步骤:
您可以结合使用和n来执行此操作。以下是一种从一组冲突中删除冲突的方法
public static <T> Set<ConstraintViolation<T>> removeViolation(final Set<ConstraintViolation<T>> constraintViolations, final String propertyName, final Class annotationClass) {
return constraintViolations.stream().filter(p ->
!(((NodeImpl) (((PathImpl) (p.getPropertyPath())).getLeafNode())).getName().equals(propertyName))
|| !((ConstraintDescriptorImpl) p.getConstraintDescriptor()).getAnnotationType().getSimpleName().equals(annotationClass.getSimpleName()))
.collect(Collectors.toSet());
}
public static Set removeViolation(最终集constraintViolations、最终字符串propertyName、最终类annotationClass){
返回constraintViolations.stream().filter(p->
!((NodeImpl)((PathImpl)(p.getPropertyPath()).getLeafNode()).getName().equals(propertyName))
||!((ConstraintDescriptorImpl)p.getConstraintDescriptor()).getAnnotationType().getSimpleName().equals(annotationClass.getSimpleName())
.collect(收集器.toSet());
}