首页 文章

验证@ScriptAssert可以访问静态方法

提问于
浏览
7

JSR303 Bean Validation实现Hibernate-Validator(4.1.0)提供了org.hibernate.validator.constraints.ScriptAssert注释 .

我得到了它来调用非静态方法 .

@ScriptAssert(script="_this.isComplexSubValid(_this.attributeA,_this.attributeB)",
              lang = "javascript")

...
public boolean isComplexSubValid(Object a, Object b)...

但现在我想将 isComplexSubValid 外部化为静态方法,以便在不同的类中重用它 . 但是我没有使用javascript验证器进行静态调用 .

@ScriptAssert(script="ComplexValidation.isComplexSubValid(_this.attributeA,_this.attributeB)",
              lang = "javascript")

public static boolean isComplexSubValid(Object a, Object b)...

抛出:

isValid调用期间出现意外异常:org.hibernate.validator.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:156)org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:140)org.hibernate.validator.metadata .MetaConstraint.validateConstraint(MetaConstraint.java:121)org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:327)org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:273)org.hibernate .validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:256)org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:210)org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119 )org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:86)org.springframework.validation.DataBinder.validate(DataBinder.java:692)org.springframework.web.b ind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:807)org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:359)org.springframework.web.bind.annotation.support . HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter . java:414)org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)org.springframework.web.servlet.FrameworkServlet . processRequest(FrameworkServlet.java:644)org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:571)javax.servlet.http.HttpServlet.service(HttpServlet.java:640 )javax.servlet.http.HttpServlet.service(HttpServlet.java:717)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java) :206)org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)org.apache.catalina.core.ApplicationFilterChain .internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:368)org.springframework .security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)org .springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain .doFilter(FilterChainProxy.java:380)org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org .springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter .doFilter(SecurityContextHolderAwareRequestFilter.java:54)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy . Java的:380)org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.authentication . www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java: 187)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)org.springframework.security . web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPe) rsistenceFilter.java:79)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)org.springframework.web . filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)org . apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)de.humanfork.security.crsf.IdempotentCsrfPreventionFilter.doFilter(IdempotentCsrfPreventionFilter.java:99)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 235)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:74)org . springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206)org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:113)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)org.apache.catalina.core.ApplicationFilterChain . internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)org.springframework.web . filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterChain.doF ilter(ApplicationFilterChain.java:206)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)org.apache.catalina . core.StandardHostValve.invoke(StandardHostValve.java:127)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)org.apache.catalina.core.StandardEngineValve.invoke(PortoEngineValve.java:109)org . apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol . java:588)org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)java.lang.Thread.run(Thread.java:662)

所以我的问题是如何在脚本标签中调用静态方法?

请不要告诉我,我可以实现我的验证器,而不是使用@Script标签 .

1 回答

  • 4

    具有静态方法的类的类名必须是完全限定的 .

    ScriptAssert(script="com.example.demo.ComplexValidation.isComplexSubValid(_this.attributeA,_this.attributeB)",
              lang = "javascript")
    

    public static boolean isComplexSubValid(Object a,Object b)...

相关问题