如何从Spring控制器接收JSON响应并在JSP页面上显示

3
我创建了一个JSP页面,带有一些文本字段。单击提交按钮后,它调用Ajax调用将数据发布到Spring控制器。现在,在数据库中保存数据后,控制器创建JSON响应。我希望在JSP文件上可以使用此响应。以下是我的文件代码...

JSP文件:

$(document).ready(function(){
        $("#submitButton").click(function(e){
             var formData = getFormData();
             $.ajax({
                type: 'POST', 
                'url': 'http://localhost:8080/Test_ReportingUI/addDb.htm',
                data: {jsonData: JSON.stringify(formData)},
                dataType: 'json',
                success: function(response){ 
                    try{
                        var strResponse=jQuery.parseJSON(response);
                    }catch(err){}
                    if(response.status=='ok')
                    {
                        alert("details added");
                    }
                    else
                    {
                        alert("error happened");
                    }

                },
                timeout: 10000,
                error: function(xhr, status, err){ 
                    if(status=='timeout')
                    {   
                        alert('Request time has been out','');
                    }
                    console.log(status,err); 
                }
            }); 
         });
    });

Spring控制器方法:

@Autowired RWCustomerService rwCustomerService;
@RequestMapping (value="addDb.htm", method=RequestMethod.POST)
String  addEditCustomer(@RequestParam String jsonData)
{
    System.out.println("hello world");
    System.out.println("-----------------\n"+jsonData);
    ModelAndView modelAndView=new ModelAndView("custDB_setup");
    JSONObject jsonResponse = new JSONObject();
    try{
        JSONObject requestedJSONObject = new JSONObject(jsonData);  
        String dbName = requestedJSONObject.getString("dbName");
        String dbUserName = requestedJSONObject.getString("dbUserName");
        String dbPassword = requestedJSONObject.getString("dbPassword");
        Iterator it=requestedJSONObject.keys();
        while(it.hasNext()){
            System.out.println("Oo..: "+it.next());
        }
        RWReportCustomerDB rwReportCustomerDB = new RWReportCustomerDB();
        rwReportCustomerDB.setDbName(dbName);
        rwReportCustomerDB.setDbLogin(dbUserName);
        rwReportCustomerDB.setDbPassword(dbPassword);
        rwCustomerService.saveDb(rwReportCustomerDB);          
        jsonResponse.put("status", "ok");       

    }
    catch(Exception ex){
        ex.printStackTrace();  
    }
    return jsonResponse.toString();
}

数据已保存在数据库中,因此json数据已到达控制器方法。但是,我无法在jsp页面上看到警告框,即“添加细节”。我该如何解决这个问题。

1个回答

6

您需要添加@ResponseBody注解。

@RequestMapping (value="addDb.htm", method=RequestMethod.POST)
@ResponseBody String  addEditCustomer(@RequestParam String jsonData)
{...}

你不需要手动编写 JSON,Spring 在后台使用 Jackson 库将对象序列化为 JSON。请参见 《Spring 3 MVC 和 JSON 示例》。只需在返回值上添加 @ResponseBody 注解即可。当 Spring 检测到以下条件时会自动处理 JSON 转换:Jackson 库存在于项目类路径中、mvc:annotation-driven 已启用以及返回方法带有 @ResponseBody 注解。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接