在我看来,Spring MVC无法绑定原始包装类型的属性(例如Integer,Boolean等)。当它尝试绑定这些属性时,会抛出以下异常。
javax.servlet.ServletException: javax.servlet.jsp.JspException: javax.servlet.jsp.JspException: org.springframework.beans.NotReadablePropertyException: Invalid property 'assigned' of bean class [model.domain.Employee]: Bean property 'assigned' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.WEB_002dINF.jsp.configuration.form.defaultForm_jsp._jspService(defaultForm_jsp.java:87)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:801)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.tiles.web.startup.TilesFilter.doFilter(TilesFilter.java:75)
只要我将'assigned'属性(getter,setter和instance变量)的类型从Boolean更改为boolean,它就可以正常工作。
任何人都可以确认Spring MVC无法绑定原始包装类型的属性吗?如果是这样,有没有解决方法?我无法将属性类型更改为boolean,因为此属性中的空值意味着我的应用程序。
感谢。
答案 0 :(得分:12)
Spring MVC适用于Boolean
。
如果Boolean
的获取者名为isAssigned()
,则可能会出现此错误。根据{{3}},只有boolean
可能具有此形式的获取名称,Boolean
应具有getAssigned()
。
答案 1 :(得分:0)
解决方法是创建/注册您自己的属性编辑器。
另一种解决方法是添加第二个setter,允许您将属性设置为'boolean'。 (你可能需要摆弄你的API来破坏Spring的“有用”的坚持,即getter和setter类型的参数/结果类型匹配。如果我正在做这种事情,我通常会得到两个不同名字的setter相同的逻辑属性。)