У меня есть метод в контроллере:
public FormValidationResult submitFormAndSendEmail(@Valid ContactForm form, BindingResult result,
@HttpSessionParam(value = "lastTimeContactFormSent", required = false) Calendar lastTimeContactFormSent)
Как вы можете видеть, я создал аннотацию @HttpSessionParam, она возьмет переменную из HttpSession и поместит ее в указанный параметр метода.
Однако ...
Перед разрешением аргумента я получаю InstantiationExceptionConstructorAccessorImpl, потому что календарь не может быть создан конструктором по умолчанию.
Используя данную трассировку стека, я вижу, чтоHandlerMethodInvoker внутри "resolModelAttribute" вызывает создание экземпляра.
Как я могу предотвратить это?Я не хочу создавать экземпляры, я хочу использовать свой собственный WebArgumentResolver для того, чтобы заполнить параметр метода.
Любые подсказки?
Дополнительная информация: Stacktrace by 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"/>