【问题标题】:how to receive json response from spring controller to a jsp page如何从spring控制器接收json响应到jsp页面
【发布时间】:2016-05-19 08:35:37
【问题描述】:

我创建了一个 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); 
                }
            }); 
         });
    });

弹簧控制器方法:

@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 页面上看不到警告框,即“添加了详细信息”。我该如何解决这个问题。

【问题讨论】:

    标签: java json spring jsp spring-mvc


    【解决方案1】:

    需要添加@ResponseBody注解

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

    您不需要手动编写 JSON,Spring 在后台使用 Jackson 库将对象序列化为 JSON。见Spring 3 MVC and JSON example

    添加@ResponseBody 作为返回值。闻春见

    • Jackson 库存在于项目类路径中
    • mvc:annotation-driven 已启用
    • @ResponseBody注释的返回方法

    Spring 会自动处理 JSON 转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 2019-08-13
      • 2013-11-23
      • 1970-01-01
      • 2016-07-26
      相关资源
      最近更新 更多