Java 在包含lambda表达式的字段上出现ConstraintValidator问题
我试图在包含lambda表达式的类字段的输出上实现简单的数据验证。使用以下方法进行验证: 自定义批注:Java 在包含lambda表达式的字段上出现ConstraintValidator问题,java,lambda,annotations,java-8,hibernate-validator,Java,Lambda,Annotations,Java 8,Hibernate Validator,我试图在包含lambda表达式的类字段的输出上实现简单的数据验证。使用以下方法进行验证: 自定义批注: import javax.validation.Constraint; 导入javax.validation.Payload; 导入java.lang.annotation.*; @记录 @目标(ElementType.FIELD) @保留(RetentionPolicy.RUNTIME) @约束(validatedBy=MandatoryValidation.class) public@in
import javax.validation.Constraint;
导入javax.validation.Payload;
导入java.lang.annotation.*;
@记录
@目标(ElementType.FIELD)
@保留(RetentionPolicy.RUNTIME)
@约束(validatedBy=MandatoryValidation.class)
public@interface必填项{
布尔值()默认为true;
字符串消息()默认值“必须提供值”;
类[]组()默认值{};
班级好吧,这是我迄今为止犯下的最愚蠢的错误之一。
主要错误:测试类中使用的供应商类型为java.util.function.Supplier,而自定义验证器中使用的供应商类型为com.google.common.base.Supplier,因此存在明显的编译错误。第二个主要错误是我没有在问题中包括完整的导入,因为我认为它们会使pos膨胀t、 那结果是个愚蠢的决定
TLDR:把导入搞砸了,使用了错误的类型,完全忽略了显式编译错误,就stackoverflow向我的白痴寻求帮助。是@Constraint
自定义注释吗?它的定义是什么?它是javax.validation注释(1.1.0.Final版本).完整错误是什么?您使用哪个JDK进行编译?
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MandatoryValidation.class)
public @interface Mandatory {
boolean value() default true;
String message() default "A value must be supplied";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import com.google.common.base.Supplier;
public class MandatoryValidation implements ConstraintValidator<Mandatory, Supplier<String>> {
private boolean mandatory;
@Override
public void initialize(Mandatory mandatory) {
this.mandatory = mandatory.value();
}
@Override
public boolean isValid(Supplier<String> supplier, ConstraintValidatorContext constraintValidatorContext) {
if (mandatory && supplier.get() == null) {
return false;
} else {
return true;
}
}
}
import java.util.function.Supplier;
public class SampleClass {
private SampleGenerator generator;
@Mandatory
public Supplier<String> lambdaField = () -> generator.next();
}