将 JSON 数据传递给 Spring MVC 控制器

Posted

技术标签:

【中文标题】将 JSON 数据传递给 Spring MVC 控制器【英文标题】:passing JSON data to a Spring MVC controller 【发布时间】:2013-08-30 03:38:19 【问题描述】:

我需要向 Spring MVC 控制器发送一个 JSON 字符串。但我不需要 有任何表单绑定,我只需要将纯 JSON 数据发送到 Controller 类。我正在对 Controller 方法进行 jQuery AJAX 调用,如下面的代码。

$.ajax (
    url: "./save",
    type: "POST",
    data: JSON.stringify(array),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function()
        alert("success ");
    
);

但是如何在 Controller 方法中检索它?(注意:它只是纯 JSON 数据,而不是表单提交)。

【问题讨论】:

【参考方案1】:

添加以下依赖项

<dependency>
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.7</version>
</dependency>

<dependency>
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.7</version>
</dependency>

修改请求如下

$.ajax( 
    url:urlName,    
    type:"POST", 
    contentType: "application/json; charset=utf-8",
    data: jsonString, //Stringified Json Object
    async: false,    //Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation
    cache: false,    //This will force requested pages not to be cached by the browser          
    processData:false, //To avoid making query String instead of JSON
    success: function(resposeJsonObject)
        // Success Message Handler
    
);

控制器端

@RequestMapping(value = urlPattern , method = RequestMethod.POST)
public @ResponseBody Person save(@RequestBody Person jsonString) 

   Person person=personService.savedata(jsonString);
   return person;

@RequestBody - 将 Json 对象转换为 java @ResponseBody- 将 Java 对象转换为 json

【讨论】:

请添加您对人的假设 Person 是一个普通的 POJO 类。这里我们使用的是 Person 类型的数据。【参考方案2】:

    HTML

    $('#save').click(function(event)         
        var jenis = $('#jenis').val();
        var model = $('#model').val();
        var harga = $('#harga').val();
        var json =  "jenis" : jenis, "model" : model, "harga": harga;
        $.ajax(
            url: 'phone/save',
            data: JSON.stringify(json),
            type: "POST",           
            beforeSend: function(xhr) 
                xhr.setRequestHeader("Accept", "application/json");
                xhr.setRequestHeader("Content-Type", "application/json");
            ,
            success: function(data) 
                alert(data);
            
        );
    
        event.preventDefault();
    );
    

      控制器

      @Controller
      @RequestMapping(value="/phone")
      public class phoneController 
      
          phoneDao pd=new phoneDao();
      
          @RequestMapping(value="/save",method=RequestMethod.POST)
          public @ResponseBody
          int save(@RequestBody Smartphones phone)
          
              return pd.save(phone);
          
      

      public Integer save(Smartphones i) 
          int id = 0;
          Session session=HibernateUtil.getSessionFactory().openSession();
          Transaction trans=session.beginTransaction();
          try 
              session.save(i);   
              id=i.getId();
              trans.commit();
          
          catch(HibernateException he)
          return id;
      
      

【讨论】:

.val() 函数从何而来? 我花了很多时间来找出非常好的例子。这只是一个,对我帮助很大。【参考方案3】:

您可以使用 JSON.stringify(jsonObject) 对 JSON 对象进行字符串化,并在控制器上将其作为字符串接收。

在 Controller 中,您可以使用 javax.json 来转换和操作它。

下载 .jar 并将其添加到项目库中并导入 JsonObject。

要创建一个json对象,可以使用

JsonObjectBuilder job = Json.createObjectBuilder();
job.add("header1", foo1);
job.add("header2", foo2);
JsonObject json = job.build();

要从字符串中读取,可以使用

JsonReader jr = Json.createReader(new StringReader(jsonString));
JsonObject json = jsonReader.readObject();
jsonReader.close();

【讨论】:

以上是关于将 JSON 数据传递给 Spring MVC 控制器的主要内容,如果未能解决你的问题,请参考以下文章

通过 AJAX 将数据传递给 MVC 中的控制器

将用户相关数据传递给 ASP.NET MVC 4 中的视图

如何将数据传递给 ASP.NET MVC 中的模式视图

将 Json 数据传递给handsontable

将json数据传递给onclick jquery函数

MVC 将数据传递给视图和循环