将JSON对象从Controller传递给View(jsp)

时间:2011-05-13 11:01:26

标签: spring-mvc view controller

我正在尝试从控制器向我的视图发送JSON对象但无法发送它。 请帮帮我!

我正在使用以下代码

public class SystemController extends AbstractController{

    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("SystemInfo", "System", "S");

        response.setContentType("application/json;charset=UTF-8");
        response.setHeader("Cache-Control", "no-cache");
        JSONObject jsonResult = new JSONObject();

        jsonResult.put("JVMVendor", System.getProperty("java.vendor"));
        jsonResult.put("JVMVersion", System.getProperty("java.version"));
        jsonResult.put("JVMVendorURL", System.getProperty("java.vendor.url"));
        jsonResult.put("OSName", System.getProperty("os.name"));
        jsonResult.put("OSVersion", System.getProperty("os.version"));
        jsonResult.put("OSArchitectire", System.getProperty("os.arch"));

        response.getWriter().write(jsonResult.toString());
     //   response.getWriter().close();

        return mav;             // return modelandview object
    }
}

在视图方面我正在使用

<script type="text/javascript">

Ext.onReady(function(response) {
     //Ext.MessageBox.alert('Hello', 'The DOM is ready!');
     var showExistingScreen = function () {
        Ext.Ajax.request({
            url                     : 'system.htm',
            method                  : 'POST',
            scope                   : this,
            success: function ( response ) {
                alert('1');
                var existingValues = Ext.util.JSON.decode(response.responseText);
                alert('2');
              }
        });
    };

    return showExistingScreen();
});

1 个答案:

答案 0 :(得分:1)

为了将JSON发送回客户端,我成功使用了以下解决方案:

1)客户端(浏览器)向我的SpringMVC控制器发送一个包含JSON格式值(但也可能是GET)请求的AJAX POST。

$.postJSON("/login", login, function(data)
{
    checkResult(data);
});

2)SpringMVC控制器方法签名:

@RequestMapping(value = "/login", method = RequestMethod.POST)
public @ResponseBody Map<String, String> 
login(@RequestBody LoginData loginData, 
HttpServletRequest request, HttpServletResponse response)

@ResponseBody是键,它“...表示返回类型应直接写入HTTP响应主体(而不是放在模型中,或解释为视图名称)。” [春季参考文件] LoginData是来自客户端请求的JSON值的简单POJO容器,如果您将jackson jar文件(我使用jackson-all-1.7.5.jar)放入类路径中,则会自动填充。 作为控制器方法的结果,我创建了一个hashMap&lt; String,String&gt;。 (例如,使用键'错误'或'查看'和适当的值)。然后,此映射自动序列化为JSON,由客户端解释(再次是普通的html页面,包括Javascript)

function checkResult(result)
{
    if (result.error)
    {
      // do error handling
    }
    else
    {
      // use result.view
    }
}