Портлет Spring 2.5.x MVC с аннотацией и AJAX с jQuery + Ошибка JSON: Тип содержимого не может быть установлен на json

Когда я пытаюсь использовать spring 2.5.x DispatcherPortlet с liferay для использования Ajax, я получаю эту ошибку. Я настроил его с помощью аннотаций.

На уровне класса я использовал следующие аннотации,

Код для контроллера ...

@Controller
@RequestMapping("VIEW")
public class MyController {

@SuppressWarnings("unchecked")
 @RequestMapping(method=RequestMethod.GET) //this is default rendering...
 public String defaultRender(Model model, PortletRequest request) {
 ...
 return "/some/someview";
 }


@RequestMapping(method=RequestMethod.POST,params="action=something") // For ajax call...using jQuery
 public ModelAndView processTotalMatchCount(RenderRequest request, Model model) throws IOException {
  Map<String,String> hmapStockSearchParams = getSomeData(request);  
  Integer totalMatches = service.getTotal(hmapStockSearchParams);
  Map map = new HashMap();
  map.put("totalMatches", totalMatches); 
  return new ModelAndView("ajaxView",map);
 }

}

Из JSP я вызываю следующую функцию JS с помощью jQuery.

function fetchTotalMatches(){ 
 var url = "<portlet:renderURL><portlet:param name='action' value='something' /></portlet:renderURL>";
  jQuery.ajax({ url: url,
    method: 'POST', 
    //dataType:'json', when i enable this it goes in error bcs response is not in JSON format...
    data: {param1:'one',param2:'two'},      
    success: function(message) {
     alert(message);
     jQuery('input:hidden[@name="total"]').val(message.totalMatches);     
     jQuery('div.secondary-nav').children('div.viewMatches').
      html(message.totalMatches);
    }, 
    error: function(xhr, ajaxOptions, thrownError) {
     alert(xhr.status + " - " + xhr.statusText);
    }
   }
  );
}

Когда я включаю dataType:'json' в вызове jquery, он переходит в функцию ошибки. В противном случае я получу ответное предупреждение всего HTML страницы, определенной в методе defaultRender (тот же jsp, из которого я вызываю эту функцию.)

И в консоли я получаю эту ошибку ...

пожалуйста, помогите в этом. Что мне не хватает?

Я использовал резолвер и просмотр, связанные с Ajax, по этой ссылке ...

http://www.jtraining.com/blogs/ajax-with-spring-mvc-and-jquery.html.

[2010-07-02 11:13:41,703][http-8080-4][ERROR] - org.springframework.web.portlet.FrameworkPortlet.processRequest(FrameworkPortlet.java:501) - Could not complete request
 java.lang.IllegalArgumentException
 at com.liferay.portlet.MimeResponseImpl.setContentType(MimeResponseImpl.java:162)
 at org.springframework.web.portlet.DispatcherPortlet.render(DispatcherPortlet.java:1090)
 at org.springframework.web.portlet.DispatcherPortlet.doRenderService(DispatcherPortlet.java:832)
 at org.springframework.web.portlet.FrameworkPortlet.processRequest(FrameworkPortlet.java:483)
 at org.springframework.web.portlet.FrameworkPortlet.doDispatch(FrameworkPortlet.java:453)
 at javax.portlet.GenericPortlet.render(GenericPortlet.java:233)
 at com.sun.portal.portletcontainer.appengine.filter.FilterChainImpl.doFilter(FilterChainImpl.java:126)
 at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:69)
 at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:100)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
 at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:535)
 at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:472)
 at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:618)
 at com.liferay.portlet.InvokerPortletImpl.invokeRender(InvokerPortletImpl.java:700)
 at com.liferay.portlet.InvokerPortletImpl.render(InvokerPortletImpl.java:419)
 at org.apache.jsp.html.portal.render_005fportlet_jsp._jspService(render_005fportlet_jsp.java:1467)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
 at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:535)
 at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:472)
 at com.liferay.portal.util.PortalImpl.renderPortlet(PortalImpl.java:2884)
 at com.liferay.portal.util.PortalUtil.renderPortlet(PortalUtil.java:897)
 at com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil.processPortlet(RuntimePortletUtil.java:170)
 at com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil.processPortlet(RuntimePortletUtil.java:103)
 at com.liferay.portlet.layoutconfiguration.util.velocity.PortletColumnLogic.processContent(PortletColumnLogic.java:133)
 at com.liferay.portlet.layoutconfiguration.util.velocity.TemplateProcessor.processColumn(TemplateProcessor.java:68)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
 at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
 at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
 at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:252)
 at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:332)
 at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
 at org.apache.velocity.Template.merge(Template.java:328)
 at org.apache.velocity.Template.merge(Template.java:235)
 at org.apache.velocity.app.VelocityEngine.mergeTemplate(VelocityEngine.java:381)
 at com.liferay.portal.velocity.VelocityEngineImpl.mergeTemplate(VelocityEngineImpl.java:179)
 at com.liferay.portal.kernel.velocity.VelocityEngineUtil.mergeTemplate(VelocityEngineUtil.java:84)
 at com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil.processTemplate(RuntimePortletUtil.java:237)
 at com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil.processTemplate(RuntimePortletUtil.java:190)
 at org.apache.jsp.html.portal.layout.view.portlet_jsp._jspService(portlet_jsp.java:831)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
 at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:535)
 at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:472)
 at com.liferay.portal.action.LayoutAction.includeLayoutContent(LayoutAction.java:294)
 at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:471)
 at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:195)
 at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
 at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
 at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:157)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
 at com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:608)
 at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:846)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
 at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
 at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
 at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
 at com.liferay.portal.servlet.FriendlyURLServlet.service(FriendlyURLServlet.java:143)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.servlet.filters.strip.StripFilter.processFilter(StripFilter.java:142)
 at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:91)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:94)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.servlet.filters.gzip.GZipFilter.processFilter(GZipFilter.java:140)
 at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:91)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilter.java:282)
 at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:91)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:94)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.servlet.filters.cache.CacheFilter.processFilter(CacheFilter.java:425)
 at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:91)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.servlet.filters.autologin.AutoLoginFilter.processFilter(AutoLoginFilter.java:257)
 at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:91)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.servlet.filters.sso.opensso.OpenSSOFilter.processFilter(OpenSSOFilter.java:73)
 at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:91)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.sharepoint.SharepointFilter.processFilter(SharepointFilter.java:193)
 at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:91)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.servlet.filters.virtualhost.VirtualHostFilter.doFilter(VirtualHostFilter.java:191)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.servlet.filters.threadlocalcache.ThreadLocalCacheFilter.processFilter(ThreadLocalCacheFilter.java:55)
 at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:91)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:154)
 at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:94)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
 at java.lang.Thread.run(Thread.java:619)

В основном это не позволяет установить тип контента на application\json в соответствии с приведенным ниже классом

public class AjaxView extends AbstractView {
 private static final Log log = LogFactory.getLog(AjaxView.class);
   private static final String REQUEST_CONTEXT_ATTRIBUTE = RequestContext.class.toString();

 public AjaxView() {
//  super();  
  setRequestContextAttribute(REQUEST_CONTEXT_ATTRIBUTE);
     setContentType("application/json;charset=UTF-8");     
 }
    /* (non-Javadoc)
     * @see org.springframework.web.servlet.view.AbstractView#renderMergedOutputModel(java.util.Map, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     */
    @Override
    protected void renderMergedOutputModel(Map map, HttpServletRequest request, HttpServletResponse response) 
    throws Exception {
        log.info("Resolving ajax request view - "+map);        
        JSONObject jsonObj = new JSONObject(map);
        log.info("content Type = " + getContentType());     
//        response.reset();
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(jsonObj.toString());
        response.getWriter().flush();
    }
}

Пожалуйста, помогите как можно скорее. Что мне нужно, так это вызов Ajax, возвращающий строку JSON в Spring 2.5.x MVC Portlet ...

заранее спасибо.


person Parth    schedule 02.07.2010    source источник
comment
ПРИМЕЧАНИЕ: я пробовал использовать Spring-json. Он также делает то же самое в своем классе JsonView, устанавливая тип содержимого json. Но я тоже получаю сообщение об ошибке ...   -  person Parth    schedule 02.07.2010


Ответы (3)


Я не нашел решения с пружиной 2.5.

Поэтому я обновился до 3.0.3 и попытался использовать ContentNegotiatingViewResolver с JSON. Но это было неудачно.

проверьте вопрос ОШИБКА: ContentNegotiatingViewResolver'а Spring 3.0.3 MVC Portlet + JSON для подробного объяснения моей проблемы в Spring 3.0.3.

Наконец, я обнаружил, что Spring 3 не поддерживает портлет JSON. Поэтому я перешел на сервлет и не использовал Spring MVC для json. Только для JSP ... я его использую.

person Parth    schedule 06.07.2010
comment
Вот эта проблема, проголосуйте, если вам нравятся портлеты и весна: jira.springframework.org/browse/SPR-7344 ... также есть решение: stackoverflow.com/q/4498266/306488 - person lisak; 22.12.2010
comment
Привет, я все еще надеюсь, что в версии 3.1.0 будет какая-то поддержка, но я просто смотрел на нее, и, похоже, не так много ... немного поста в блоге было бы хорошо, у меня никогда не было ответ на весеннем форуме или Jira. у вас есть новости по этому поводу? - person lisak; 26.01.2011

Мне кажется, вам следует использовать следующие

  • используйте 1_
  • использовать contentType: "application/json; charset=utf-8"
  • используйте JSON.stringify для преобразования ваших данных (каждое свойство отдельно), которые вы указываете для параметров данных.

вы можете увидеть в разделе Как мне создать объект JSON для отправки в AJAX WebService? пример того, как выполнить кодирование JSON. Другая ссылка Могу ли я вернуть JSON из веб-службы .asmx, если ContentType не JSON?, вероятно, также может быть полезным.

person Oleg    schedule 02.07.2010
comment
эй, я уже уведомил, что контент, который я получаю, не в формате JSON. параметры отправляются успешно, и мои расчеты дают окончательный результат. Единственная проблема в том, что я получаю весь HTML в обратном вызове ... так что ... пожалуйста, помогите в этом ... - person Parth; 02.07.2010
comment
привет, теперь я изменил свой класс представления и создал новый, который напрямую реализует интерфейс представления. Теперь я каждый раз даю новый AjaxView () для моего метода ajax. Ошибка исчезла, но мой контент не поступает в JSON :( - person Parth; 02.07.2010
comment
Вы должны установить dataType на 'json' или на 'html'. Лучше установить и dataType, и contentType в jQuery.ajax. По крайней мере, в двух местах вашего кода вы устанавливаете ContentType на application/json (см. AjaxView, который вы опубликовали) и пишете, что вам не нужно иметь JSON ??? - person Oleg; 02.07.2010
comment
мне нужен JSON, но сервер не отправляет JSON ... Он отправляет HTML ... вот в чем моя проблема ... также попробую вашу заметку ... спасибо - person Parth; 02.07.2010
comment
Основная проблема в том, что даже я создал свой собственный класс AjaxView, возвращая новое представление каждый раз, когда я вызываю метод ajax, устанавливая тип содержимого на json, создавая новый JSONObject с моими возвращаемыми данными в него и устанавливая строку json в response.getWriter().print() из класса AjaxView. .. Я все еще получаю HTML :(. Это проблема / относительно режима ПРОСМОТРА портлета? - person Parth; 02.07.2010
comment
Я не знаю Spring, но в целом достаточно задать в ответе contentType и записать данные в виде потока. Как в примере по ссылке (см. jtraining.com /blogs/ajax-with-spring-mvc-and-jquery.html), который вы опубликовали: response.getOutputStream().write( jsonString.getBytes() );. Кроме того, в примере из ссылки используется jQuery 1.3.2. В jQuery 1.4.x вам следует быть более осторожными с установкой dataType и contentType. Если вы этого не сделаете, jQuery попытайтесь угадать, и вы получите не то, что хотите. - person Oleg; 02.07.2010
comment
Я использовал jquery 1.3.2 ... и пытаюсь понять, почему он загружает HTML-страницу моей страницы по умолчанию в этом запросе JSON :( - person Parth; 02.07.2010

Если вам нужны функции JSON в портлете Spring MVC, вам нужно использовать сопоставление ресурсов, а не сопоставление запросов!

Я не уверен в поддержке Spring MVC для JSON из коробки, весной я никогда не пробовал (я имею в виду @ResponseBody)

Что я делаю для генерации JSON в портлете Spring MVC, я делаю страницу JSP для цели JSON внутри этого JSP

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="application/json; charset=UTF-8" pageEncoding="UTF-8" %>
<c:out escapeXml="false" value="${outObject}"/>

и в контроллере

     @ResourceMapping("the id for calling from client side")
     public ModelAndView countryRequest(ResourceRequest request, ResourceRequest response) {

.... omit 

    Map<String, String> model = new HashMap<String, String>();
    model.put("outObject", json);
    return new ModelAndView("ajaxResponse", model);
}

Вы получите результат при успешном методе, например:

function <portlet:namespace/>changeSicGroup(){
var sicGroupId = jQuery('#<portlet:namespace/>addBranchsicGroup').val();
jQuery.ajax({
    url: '<portlet:resourceURL id="showSicSector" />',
    global: false,
    type: "POST",
    dataType:'json',
    data: {sicGroupId : sicGroupId}
    ,async:false
    ,success: function(result){
        var targetCom = jQuery('#<portlet:namespace/>addBranchSicSector');
        if(result != null){
            //                    jQuery("#"+targetComId).show();
            targetCom.find('option').remove();
            targetCom.append('<option value=""><spring:message code="pleaseSelectSicSector"/></option >');
            for(var i=0;i< result.length;i++){
                targetCom.append("<option value="+result[i].sectorCode+">"+result[i].desc+"</option>");
            }
            //                    targetCom.attr('disabled',false);
        }else{
            targetCom.find('option').remove();
            targetCom.append('<option value=""><spring:message code="pleaseSelectSicSector"/></option >');
            //                    jQuery("#"+targetComId).hide();
        }
    }
});

}
person Community    schedule 14.10.2012