Liferay与Spring 2.5中的Spring-json问题

时间:2010-06-17 17:19:43

标签: java json spring spring-mvc liferay

我正在尝试在使用Liferay 5.1.2(包括Spring 2.5)完成的项目中使用库spring-json.1.3.1。

在项目网站instructions之后,我设法在我的控制器中命中请求,但是在通过modelAndView对象返回json对象时,它失败并出现以下错误:

java.lang.IllegalArgumentException at com.liferay.portlet.MimeResponseImpl.setContentType(MimeResponseImpl.java:162)

我检查了Liferays的源代码,它检查了正在设置的contentType是否在一个带编码的列表中,如果不是,它会抛出IllegalArgumentException,它正是os正在发生的事情。

这是我的解析器代码:

<bean id="xmlFileViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver">

         /WEB-INF/context/views.xml                      1        

我的views.xml代码:

<beans>
   <bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView"/> 

我的控制员:

@SuppressWarnings("unchecked")
@Override
public ModelAndView handleRenderRequest(RenderRequest arg0,
   RenderResponse arg1) throws Exception {

   Map model = new HashMap();
         model.put("firstname", "Peter");
         model.put("secondname", "Schmitt");

   return new ModelAndView("jsonView", model);
} 

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这个问题是因为您需要将窗口状态设置为独占模式,因此它可以工作:

<portlet:renderURL var="jsonRequest" windowState="<%= LiferayWindowState.EXCLUSIVE.toString() %>"><portlet:param name="actionType" value="fetchGames"/></portlet:renderURL>

来自MimeResponseImpl.java的一段代码:

public void setContentType(String contentType) {
    if (Validator.isNull(contentType)) {
        throw new IllegalArgumentException();
    }

    Enumeration<String> enu = _portletRequestImpl.getResponseContentTypes();

    boolean valid = false;

    if (getLifecycle().equals(PortletRequest.RESOURCE_PHASE) ||
        _portletRequestImpl.getWindowState().equals(
            LiferayWindowState.EXCLUSIVE)) {

        valid = true;
    }

如果有人需要更多帮助,请告诉我。