我在Spring MVC 3.0中遇到了ModelAttribute的一個奇怪問題。當我在本地部署應用程序時,它工作正常。但是,當我部署一個遠程服務器上的應用程序,它失敗每次用戶訪問一個特定的動作,與錯誤:Can ModelAttribute可以是原始的嗎?
ERROR: my.package.application.web.filter.ExceptionFilter - long.<init>()
java.lang.NoSuchMethodException: long.<init>()
at java.lang.Class.getConstructor0(Class.java:2706)
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:104)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:762)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:356)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:153)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
的代碼,我的用戶給init的ModelAttribute在控制器:
@ModelAttribute("id")
public long getUserId(HttpSession session) {
UserInfoHolder userHolder = (UserInfoHolder) session
.getAttribute("userHolder");
long userId = userHolder.getUserId();
return userId;
}
據我所知,該錯誤不能在我的本地工作站上重現。它發生在動作被調用之前。
展望HandlerMethodInvoker.java(線762),我們看到這一行:
bindObject = BeanUtils.instantiateClass(paramType);
一個經驗豐富的礦山的同行認爲,這條線會導致問題,因爲原始型的ModelAttribute(長)沒有按」沒有一個構造函數。我認爲這個理由也許是對的,但是它怎麼解釋web應用在我的本地服務器上工作正常?
我試圖搜索以知道ModelAttribute是否支持原始數據類型,但沒有很好的結果。有沒有人有關於這個問題的經驗?
我已經試過了,但它仍然失敗,對於Long類型也有相同的錯誤。 Java版本是相同的:Java 1.6 –
當你這樣做的時候,你是否在HandlerMethodInvoker.java(762行)設置了一個斷點並檢查了paramType是什麼?它也變成了Long嗎? – Raku
是的,它變成了長。 –