我想使用支持 JSON 的 DispatcherPortlet 类制作 spring MVC 3.0.3 portlet。因此,我在 spring 上下文文件中添加了以下配置。
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
文本/html
没有这个,如果我只使用“InternalResourceViewResolver”,那么它运行良好并且我能够使用 portlet。但是随着这个 bean 的定义,我在 tomcat 启动时遇到了以下错误。
我四处搜索并找到一个链接,说明这个带有 JSON 的 bean 仅适用于最新的 spring 版本中的 servlet。也请检查链接。
http://jira.springframework.org/browse/SPR-7344 (Portlet 的 JSON 问题...)
另请检查下面粘贴的错误。帮我... 谢谢。
:错误:
java.lang.IllegalArgumentException:类 [org.springframework.web.portlet.context.PortletRequestAttributes] 的对象必须是类 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
和相关类中复制一些代码。
关于java - 错误 : 'ContentNegotiatingViewResolver' of Spring 3. 0.3 MVC Portlet+JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3183805/