在某些情况下如何允许忽略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不可访问”)

我想知道如果用户愿意,是否可以忽略该验证

步骤:

  • 第一次验证表单
  • 抛出约束冲突并将其显示给用户
  • 用户选择“我知道,无论如何都要添加”并重新提交
  • 第二次验证表单,验证除@validul之外的所有内容

  • 您可以结合使用和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());
    }