java - 如何防止@ModelAttribute 在方法中实例化日历

标签 java spring spring-mvc

我在 Controller 中有一个方法:

public FormValidationResult submitFormAndSendEmail(@Valid ContactForm form, BindingResult result,
  @HttpSessionParam(value = "lastTimeContactFormSent", required = false) Calendar lastTimeContactFormSent)

如您所见,我已经创建了一个@HttpSessionParam 注释,这将从 HttpSession 获取一个变量并将其放入指定的方法参数中。

然而...

在解析参数之前,我收到一个 InstantiationExceptionConstructorAccessorImpl,因为默认构造函数无法实例化日历。

使用给定的堆栈跟踪,我看到“resolveModelAttribute”中的 HandlerMethodInvoker 导致了实例化。

我怎样才能避免这种情况?我不想实例化,我想使用我自己的 WebArgumentResolver 来填充方法参数。

有什么线索吗?

更多信息: Spring (3.0.4) 的堆栈跟踪:

    java.lang.InstantiationException
    at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:104)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:772)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:356)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:427)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:415)

我没有看到调试器命中 webargumentresolver。

参数在我的应用程序上下文 (xml) 中定义如下:

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="customArgumentResolver" ref="sessionParamResolver"/>
</bean>  

<!--  annotation to resolve httpSession attributes -->
<bean id="sessionParamResolver" class="nl.usgpeople.vakgilde.spring.mvc.extensions.SessionParamArgumentResolver"/>

最佳答案

看起来您的参数解析器没有被触发或没有解决参数。确保:

  • 您的解析器已正确传递给 AnnotationHandlerMethodAdapter
  • 如果你的解析器被触发,它会正确解析参数

关于java - 如何防止@ModelAttribute 在方法中实例化日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4968115/

相关文章:

java - NetworkInfo.isConnected() 返回 true 但没有连接

java - Solr 身份验证可能吗? (或者 apache 端口身份验证也可以)

java - Java 应用程序中的属性框架

Spring Boot 模板未解决

spring -/oauth/token 中的 XSRF token 无效

Java Applet 不显示圆圈

java - 为什么我的登录用户 GUI 不能正确设置警告标签?

java - Spring调度程序关闭错误

java - Tomcat 或 Jetty 上的 Spring Web 应用程序 Controller 内基于事件的编程

java - Spring Security CSRF 与 enctype ="multipart/form-data"