java - 错误 : 'ContentNegotiatingViewResolver' of Spring 3. 0.3 MVC Portlet+JSON

标签 java json spring spring-mvc portlet

我想使用支持 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 问题...)

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

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

:错误:

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/

相关文章:

java - 尝试使用 MongoDB 设置 Querydsl 3.6.0,但未找到 MorphiaAnnotationProcessor

java - 当数组在创建它的类之外定义时,为什么会出现 "Array constants can only be used in initializers"

java - 右/左外连接 from() 和许多 'and' 与 JOOQ 中的四个表

ios - 如何在 Swift 中解析具有多个数组的 JSON

java - RestTemplate Junit : Cannot invoke "org.springframework.http.ResponseEntity.getBody()" because "response" is null

java - 我应该从哪里获取这些基本的 Java 类?

c# - JSONObject 中每个 JSONnode 的 Unity

java - GSON 创建对象数组

java - 如何将sql native 查询结果映射到spring jpa存储库中的DTO?

java - 一次交易中的两种方法