我正在一个使用bean验证(Hibernate Validator 5.1.3.Final)的项目上。我的bean具有带@Past
注释的属性。
@Past(message = "A data deve estar no passado.")
private LocalDate dataAbertura;
但是,当验证发生时,我得到以下异常:
21:46:12,424 ERROR [io.undertow.request] (default task-35) UT005023: Exception handling request to /financeiro/clientes/pessoafisica: javax.servlet.ServletException: javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.time.LocalDate.
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:127) [vraptor-4.1.4.jar:]
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_25]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_25]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_25]
Caused by: javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.time.LocalDate.
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.verifyResolveWasUnique(ConstraintValidatorManager.java:218) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.findMatchingValidatorClass(ConstraintValidatorManager.java:193) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.getInitializedValidator(ConstraintValidatorManager.java:97) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:125) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
怎么了?Hibernate Validator不支持LocalDate?
实际上要提到的问题是HV-874。Hibernate
Validator 5.2.x确实增加了对某些新Java
8日期/时间类型的支持。在这种情况下,我应该强调“一些”。特别LocalDate
不支持。的Javadocs LocalDate
说:
此类不存储或表示时间或时区。相反,它是对日期的描述,用于生日。如果没有其他信息(例如偏移或时区),则无法在时间线上表示时刻。
如果没有时间轴上的即时信息,就无法说出给定日期是在零件中还是在将来。首先,通过附加时区,可以陈述并回答这个问题。
如果你仍然觉得很有道理在您的使用情况下,使用Past
和@Future
约束LocalDate
你总是可以实现自己ConstraintValidator
的LocalDate
,并使用通过XML注册它constraint- definition
在约束映射文件元素看到这里。
如果您使用的是Hibernate Validator 5.2,则还可以使用Java
ServiceLoader方法来注册其他ConstraintValidator
实现-
请参见ConstraintDefinitionContributor。后者目前是特定于Hibernate
Validator的功能。
我在应用程序部署期间进行Hibernate验证时遇到了一些问题。我有两个类,Frame和FrameReleasePlan,它们在OneToOne关系中关联。在数据库端,关系是单向的。frame_release_planss表有一个NUMERIC(19,0)类型的“frame_id”列,它是一个指向frame表“id”列的外键。当我尝试部署时,模式验证失败并出现错误: 无法生成Hibernate S
我只是Android应用程序开发的初学者。当我在Android Studio 1.1.0上创建一个新项目时,它放弃了此错误“渲染问题找不到以下类android.support.v7.internal.widget.ActionBarOverlayLayout” 现在我在谷歌上搜索了一下,我发现大多数人可能给出了3个解决方案。 他们说: > 将 api(从预览窗口窗格)从 22 更改为 21,或者
有什么想法吗?(角2)
我尝试使用http://www.freeformatter.com/xml-validator-xsd.html但由于上面的错误,它失败了。我发现了许多相同的问题,但没有一个答案对我有帮助。请帮助,正确的XML/XSD是什么? 我的XML:(只有最小的一个) 我的XSD:(只有最小的一个)
问题内容: 我正在从npm 使用此架构: 如果我尝试保存已经存在于db中的电子邮件,则如果省略该字段,我希望得到一个类似的电子邮件。但是事实并非如此,我得到了。 这不是验证错误(即使我删除了unique:true也会发生)。 知道为什么吗? 问题答案: 我更喜欢将其放在路径验证机制中,例如 然后,它将被包装,并在您调用或时作为第一个参数返回。