Проблема Spring-JSON в Liferay с Spring 2.5 - PullRequest
0 голосов
/ 17 июня 2010

Я пытаюсь использовать библиотеку spring-json.1.3.1 в проекте, который был сделан с Liferay 5.1.2, который включает Spring 2.5.

Следуя веб-сайту проекта инструкциям , мне удалось обработать запрос в моем контроллере, но в момент возврата объекта json обратно через объект modelAndView он завершается с ошибкой:

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

Я проверил исходный код Liferays, и он проверяет, что contentType, который он устанавливает, находится в зашифрованном списке, если он не выдает исключение IllegalArgumentException, что это именно то, что происходит.

Это мой код разрешения для вида:

<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 Ответ

1 голос
/ 18 января 2011

Эта проблема связана с тем, что вам нужно установить состояние окна как исключительный режим, чтобы оно работало:

<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;
    }

Дайте мне знать, если кому-то понадобится дополнительная помощь.

...