Java 如何防止@modeldattribute在方法中实例化日历
我在控制器中有一个方法:Java 如何防止@modeldattribute在方法中实例化日历,java,spring,spring-mvc,Java,Spring,Spring Mvc,我在控制器中有一个方法: public FormValidationResult submitFormAndSendEmail(@Valid ContactForm form, BindingResult result, @HttpSessionParam(value = "lastTimeContactFormSent", required = false) Calendar lastTimeContactFormSent) 如您所见,我创建了一个@HttpSessionParam注释,
public FormValidationResult submitFormAndSendEmail(@Valid ContactForm form, BindingResult result,
@HttpSessionParam(value = "lastTimeContactFormSent", required = false) Calendar lastTimeContactFormSent)
如您所见,我创建了一个@HttpSessionParam注释,它将从HttpSession获取一个变量,并将其放入指定的方法参数中
然而
在解析参数之前,我收到一个实例化ExceptionConstructorAccessorImpl,因为默认构造函数无法实例化日历
使用给定的stacktrace,我看到“resolveModelAttribute”中的HandlerMethodInvoker导致了实例化
我怎样才能防止这种情况?我不需要实例化,我想使用我自己的WebArgumentResolver来填充方法参数
有什么线索吗
更多信息:
弹簧堆叠跟踪(3.0.4):
我没有看到调试器命中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
- 如果您的解析器被触发,它将正确解析参数
查看,在第15.12章配置SpringMVC中,据说它将定义一个AnnotationMethodHandlerAdapter。因此,我想预先定义它可以确保它也使用您的CustomArgumentResolver。我已经在应用程序上下文中定义了它,我已经用它的配置方式更新了我的原始问题。顺便说一句,通过这样做,您将覆盖默认的AnnotationMethodHandlerAdapter。这是spring中的一个bug,请参见此处:,您需要去掉mvc:annotation-driven标记以获得完全控制。在spring 3.1中,这似乎更容易,您可以使用mvc:annotation-driven标记并在自己的解析器中设置(希望如此)。至少它应该适用于转换服务。
<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"/>