如何解决为什么在使用 HibernateValidator 时无法获取 ${validatedValue}
我想通过使用 ${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_err_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
自动。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。