gpt4 book ai didi

java - 在包含 lambda 表达式的字段上使用 ConstraintValidator 问题

转载 作者:行者123 更新时间:2023-11-29 04:53:55 25 4
gpt4 key购买 nike

我正在尝试对包含 lambda 表达式的类字段的输出实现简单的数据验证。验证是使用 a custom annotation and ConstraintValidator 完成的如下:

自定义注释:

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 {};

}

自定义 validator :

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();

}

我的问题是上面的代码产生了一个编译错误,指出“此数据类型不允许注解@Mandatory。”

如果我从我的自定义注释中删除 "@Constraint(validatedBy = MandatoryValidation.class)" 行,错误就会消失,这让我认为我确实在自定义 validator 的某个地方搞砸了,但是我不知道如何修复它。

谁能告诉我上面的代码有什么问题?

编辑:

我正在使用以下配置:
Jdk : jdk1.8.0_65
javax.validation-api : 1.1.0.Final
hibernate validator 注释处理器:4.1.0.Final

至于完整的编译错误信息:
错误:(5, 5) java: 此数据类型不允许注解@Mandatory。

我还注意到以下警告:警告:java:注释处理器“org.hibernate.validator.ap.ConstraintValidationProcessor”支持的源版本“RELEASE_6”低于-source“1.8”。
如果我切换到 5.2.2.Final 版本的 hibernate-validator-annotation-processor 但编译错误仍然存​​在,则此警告将被删除。

最佳答案

好吧,事实证明这是迄今为止我设法解决的最愚蠢的错误之一。主要错误:测试类中使用的供应商是 java.util.function.Supplier 类型,而自定义 validator 中使用的供应商是 com.google.common 类型。 base.Supplier,因此出现明显的编译错误。第二个主要问题是我没有在我的问题中包括完整的进口,认为他们会膨胀帖子。结果证明这是一个愚蠢的决定。

TLDR:搞砸了导入,使用了错误的类型,完全忽略了显式编译错误,在 stackoverflow 上寻求帮助以解决我的愚蠢问题。

关于java - 在包含 lambda 表达式的字段上使用 ConstraintValidator 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34454574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com