提问人:dja 提问时间:10/16/2023 最后编辑:dja 更新时间:10/17/2023 访问量:66
@UUID休眠验证器不会在应用程序启动时进行验证
@UUID hibernate validator doesn't validate on application start
问:
我尝试使用 Spring 对 UUID 进行验证。
当我直接在配置类中使用 Pattern 时,如代码所示,并在 yaml 中键入错误的 UUID,它会在应用程序启动时在验证时正确打印错误:
@Validated
@Configuration
@Getter
@Setter
@ConfigurationProperties
public class ClientConfig {
@Pattern(regexp = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")
@Nonnull
private String clientId;
}
如果我使用此处提供的答案并将模式提取到自实现@interface中,它也可以工作。但是,如果我尝试使用休眠中的注释,那么切换到这个:
@org.hibernate.validator.constraints.UUID
@Nonnull
private String clientId;
然后,我的应用程序不再验证 yaml 中的属性,并且不会在启动时触发任何错误。
冬眠我错过了什么?我是否需要注册一些额外的注释处理器才能使其工作以及如何工作?
我对@interfaces有点陌生,我也不明白如何轻松找到接口后面的实现类。
答:
0赞
dja
10/17/2023
#1
我发现了以下几点:
使用 jdk11
我在 IDE 中没有遇到编译错误,我可以启动应用程序,并且它不会在 UUIDValidator 内的任何位置停止。但是,如果我尝试运行mvn install,则会出现以下错误:
[ERROR] package m365.graph.client;
[ERROR] ^
[ERROR] The type jakarta.validation.Payload cannot be resolved. It is indirectly referenced from required .class files
这不是配置类本身,而是使用配置的类。
使用 jdk17
由于我们无论如何都想迁移到 17,所以我完成了升级并在这里尝试了一下,因为我知道您不能再在那里使用 javax.annotation。在这种情况下,一切都按预期工作。它正确地停在 UUIDValidator 中的 initilize 断点处,并且在配置中验证了错误的 UUID,从而引发错误。
但是,有人知道为什么我仅在运行 mvn 时使用 jdk11 时才遇到这个令人困惑的错误吗?
下一个:在 Java 中简化验证规则序列
评论