Spring 3.1,JSON响应ModelAndView

时间:2012-12-10 21:59:59

标签: java json spring response partial-views

这是我的第一篇文章。对不起我的英语......

我遇到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渲染局部视图?

感谢。

3 个答案:

答案 0 :(得分:0)

这里有一些可能出错的地方:

通过指定Content-type application/json标题,你期待json的回复,但是看看你处理响应的方式,看起来你想要的是一个html

如果是您要查找的html作为回复,请从请求中删除Content-Type标头,从@ResponseBody响应中删除ModelAndView注释,而只是返回指向一个普通的jsp,可以创建你期待的html响应..

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

答案 1 :(得分:0)

如果你想要的是json更新页面的某些部分不返回ModelAndView,返回String,确保有一个json序列化器

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

答案 2 :(得分: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。 它正在发挥作用。