错误:Spring 3.0.3 MVC Portlet + JSON的’ContentNegotiatingViewResolver’

我想使用DispatcherPortlet类生成spring MVC 3.0.3 portlet并支持JSON。 所以,我在spring上下文文件中添加了以下配置。

 

text / html的

如果没有这个,如果我只使用’InternalResourceViewResolver’那么它运行正常,我可以使用portlet。 但是定义了这个bean后,我在tomcat启动时遇到了以下错误。

我google了一下,找到一个链接,声明这个带有JSON的bean只能在最新的spring vesion中使用servlet。 请检查链接。

http://jira.springframework.org/browse/SPR-7344(portlets的 JSON问题……)

http://jira.springframework.org/browse/SPR-6932?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel#issue-tabs

另请检查下面粘贴的错误。 帮帮我……谢谢。

:错误:

java.lang.IllegalArgumentException: Object of class [org.springframework.web.portlet.context.PortletRequestAttributes] must be an instance of class org.springframework.web.context.request.ServletRequestAttributes

请检查日志

  Caused by: java.lang.IllegalArgumentException: Object of class [org.springframework.web.portlet.context.PortletRequestAttributes] must be an instance of class org.springframework.web.context.request.ServletRequestAttributes at org.springframework.util.Assert.isInstanceOf(Assert.java:337) at org.springframework.util.Assert.isInstanceOf(Assert.java:319) at org.springframework.web.servlet.view.ContentNegotiatingViewResolver.resolveViewName(ContentNegotiatingViewResolver.java:363) at org.springframework.web.portlet.DispatcherPortlet.resolveViewName(DispatcherPortlet.java:1110) at org.springframework.web.portlet.DispatcherPortlet.render(DispatcherPortlet.java:1052) at org.springframework.web.portlet.DispatcherPortlet.doRenderService(DispatcherPortlet.java:761) at org.springframework.web.portlet.FrameworkPortlet.processRequest(FrameworkPortlet.java:522) 

ContentNegotiatingViewResolver不适用于portlet,只适用于servlet。

作为一般规则,Spring中的许多servlet API类都具有等效的portlet,例如

  • org.springframework.web。 servlet .HandlerAdapter
  • org.springframework.web。 portlet .HandlerAdapter

您必须确保使用正确的 – servlet和portlet API完全不兼容。

但是,从Spring 2.5开始,portlet框架被忽略了(可能是因为它很少使用),而servlet MVC API的新部分还没有被包含在portlet MVC API中。

似乎如果你想做你想做的事情,你将不得不自己做很多事情。 您可以从ContentNegotiatingViewResolver和相关类中复制一些代码。

看一下这个。 它现在应该工作