为什么在使用HibernateEvalidator时无法获取${validatedvalue}

oalqel3c  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(160)

我想使用${validatedvalue}获取验证消息中的无效值。但我有个例外。
例外

java.lang.NumberFormatException: For input string: "validatedValue"
    java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    java.lang.Integer.parseInt(Integer.java:580)
    java.lang.Integer.parseInt(Integer.java:615)
    java.text.MessageFormat.makeFormat(MessageFormat.java:1427)
    java.text.MessageFormat.applyPattern(MessageFormat.java:479)
    java.text.MessageFormat.<init>(MessageFormat.java:380)
    org.springframework.context.support.MessageSourceSupport.createMessageFormat(MessageSourceSupport.java:159)
    org.springframework.context.support.ResourceBundleMessageSource.getMessageFormat(ResourceBundleMessageSource.java:352)
    org.springframework.context.support.ResourceBundleMessageSource.resolveCode(ResourceBundleMessageSource.java:175)
    org.springframework.context.support.AbstractMessageSource.getMessageInternal(AbstractMessageSource.java:224)
    org.springframework.context.support.AbstractMessageSource.getMessage(AbstractMessageSource.java:169)
    org.springframework.context.support.DelegatingMessageSource.getMessage(DelegatingMessageSource.java:83)
    org.springframework.context.support.AbstractApplicationContext.getMessage(AbstractApplicationContext.java:1320)
    org.springframework.web.servlet.support.RequestContext.getMessage(RequestContext.java:725)
    org.springframework.web.servlet.support.BindStatus.initErrorMessages(BindStatus.java:308)
    org.springframework.web.servlet.support.BindStatus.getErrorMessages(BindStatus.java:278)
    org.springframework.web.servlet.tags.form.ErrorsTag.exposeAttributes(ErrorsTag.java:321)
    org.springframework.web.servlet.tags.form.AbstractHtmlElementBodyTag.writeTagContent(AbstractHtmlElementBodyTag.java:53)
    org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:87)
    org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:83)
    org.apache.jsp.WEB_002dINF.jsp.basic.validation_005fand_005ferror_jsp._jspService(validation_005fand_005ferror_jsp.java:215)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:467)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:378)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:326)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:171)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1373)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1118)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1057)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:94)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

我在java对象中使用这样的验证注解。

@DateTimeFormat(pattern = "yyyy:MM:dd")
protected Date birthday;

validation\u err\u message.properties中的消息定义如下。

typeMismatch.birthday=input value of birthday is not valid. ({0}:  ${validatedValue} ).
@Override
@Bean("messageSource")
public MessageSource messageSource() {
    final ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource();
    resourceBundleMessageSource.setBasename("validation_err_message");
    resourceBundleMessageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());
    resourceBundleMessageSource.setDefaultLocale(Locale.CHINA);
    return resourceBundleMessageSource;
}

验证程序的定义:

@Override
public Validator getValidator() {
    final OptionalValidatorFactoryBean validatorFactoryBean = new OptionalValidatorFactoryBean();
    validatorFactoryBean.setProviderClass(org.hibernate.validator.HibernateValidator.class);
    validatorFactoryBean.setValidationMessageSource(this.messageSource);
    return validatorFactoryBean;
}

messageinterpolator将

org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator

自动地。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题