2012-12-10 36 views
1

这是我的第一篇文章。我很抱歉我的英语...Spring 3.1,JSON响应ModelAndView

我有问题postJSON和返回与ModelAndView局部视图。

我的控制器:

@RequestMapping(method=RequestMethod.POST, value = "/addUrl.html") 
public @ResponseBody ModelAndView addSubMenu(@RequestBody Menu menu) { 
    ModelAndView mav = new ModelAndView(PathConfig.MENU_DIR + "show_url"); 

    int id = menuService.saveOrUpdateMenu(1, menu.getTitle(), menu.getUrl(), 4, "pl"); 
    mav.addObject("submenu", menuService.get(id)); 
    return mav; 
} 

我的Ajax代码:

$("#menuUrl").submit(function(){ 
    var menu = $(this).serializeObject(); 

    $.ajax({ 
     type: "POST", 
     url: config.resourcePath+"/addUrl.html", 
     data: JSON.stringify(menu), 
     dataType: 'json', 
     contentType: "application/json; charset=utf-8", 
     success: function(response){ 
      $("#site").append(response); 
     }, 
     error: function(e){ 
      alert("Server did not response."); 
     } 
    }); 

}); 

但是...我有错误:服务器未响应...

我如何可以使局部视图与json?

谢谢。

+1

在* classpath *上有像JSON那样的JSON序列化程序,而@ @ RequestMapping注解的URL是否正确 - '/ addUrl.html'? – Lion

+0

我很困惑。你想返回呈现的HTML还是JSON数据模型?您的服务器想要将ModelAndView对象序列化为JSON字符串,并且您的jQuery代码想要将HTML元素附加到DOM。 – Stefan

回答

0
$("#menuUrl").submit(function(){ 
    var obj = $(this).serializeObject(); 
    obj.parentId = getParentId(menuDivId); 

    $.ajax({ 
     url: config.resourcePath+"/addUrl.html", 
     data : JSON.stringify(obj), 
     contentType : 'application/json', 
     type : 'POST', 
     context: document.body, 
    }).done(function(response) { 
     $("#site").append(response); 
    }); 

    return false; 
}); 

和控制器返回ModelAndView。 它正在工作。

0

有几件事情可能是错在这里:

通过指定的application/json你期待JSON的响应回Content-type头,但是看着你现在的样子处理它看起来像你的反应想要的是一个html

如果它是您正在寻找的html作为响应,则从请求中删除Content-Type标头,从ModelAndView响应中删除@ResponseBody注释,而不是仅返回一个指向正常jsp的视图它可以创建你期待的html响应..

@RequestMapping(method=RequestMethod.POST, value = "/addUrl.html") 
public ModelAndView addSubMenu(@RequestBody Menu menu) { 
... 
} 
+0

这将提供HTML代码(模型交付形式控制器,视图从模板传递)到客户端。这将是我对部分内容的理解。然后,您需要告诉JQuery期望HTML或文本,而不是JSON。 – Stefan

0

如果你想要的是JSON更新页面的某些部分不返回一个ModelAndView,返回字符串,确保有一个JSON序列

@RequestMapping(method=RequestMethod.POST, value = "/addUrl.html") 
    public @ResponseBody String addSubMenu() { 
     //yourvariable 
     return yourvariable.toString(); 
    } 
+0

这将提供你在变量中所拥有的。如果你想返回一个对象,可以考虑返回一个对象,让Spring把它编组成JSON。如果您想提供一些浏览器可渲染代码,我将使用ModelAndView(不带ReponseBody注释)将视图渲染委托给View层(结果为 – Stefan

+0

)。如果需要对象,它将返回一个String,将String替换为您的对象你可以用jackson库例如序列化它。 – pgardunoc