gpt4 book ai didi

Javax 验证实现

转载 作者:行者123 更新时间:2023-11-29 02:58:51 26 4
gpt4 key购买 nike

我正在尝试为局部变量创建自定义注释,但我只是不明白像 @NotNull@Null 这样的注释实际上是如何在代码中实现的。我查看了实际文件,这里是 @NotNull:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { })
public @interface NotNull {

String message() default "{ javax.validation.constraints.NotNull.message }";

Class<?>[] groups() default { };

Class<? extends Payload>[] payload() default { };

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@interface List {
NotNull[] value();
}
}

但我没有看到它检查某些内容是否为 null 的任何地方。 实际检查在哪里进行?

最佳答案

通常你需要提供用于验证的validatedBy类

@Target(TYPE)
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {TicketPresenceValidator.class})
public @interface AtLeastOneTicket {
}


public class TicketPresenceValidator implements ConstraintValidator<AtLeastOneTicket, TicketInfo> {
@Override
public void initialize(TicketInfo constraintAnnotation) {
}

@Override
public boolean isValid(TicketInfo ticketInfo,
ConstraintValidatorContext context) {
return ticketInfo.getSize() != 0;
}
}

对于内置约束(来自 javax.validation.* 包),如 NotNull validator 由实现库提供。例如 Hibernate Validator 实现,这里是

NullValidator实现

然后约束和 validator 在 helper class 中链接在一起

关于Javax 验证实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36477544/

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