2013-08-30 169 views
32

我需要发送一个JSON字符串到Spring MVC控制器。但我没有 有任何形式绑定到它,我只需要发送一个普通的JSON数据到Controller类。我是像下面的代码一样对Controller方法进行jQuery AJAX调用。 (请注意:它只是普通的JSON数据而不是表单提交)。但是,如何在Controller方法中检索它(注意:它只是普通的JSON数据,而不是表单提交)。传递JSON数据到一个Spring MVC控制器

回答

42

添加以下依赖性

<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

+0

请加上乌尔假设有关人士 –

+0

人是正常的POJO类。这里我们使用Person类型的数据。 –

4
  1. 的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(); 
    }); 
    
  2. 控制器

    @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); 
        } 
    
  3. 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; 
    } 
    
+0

.val()函数来自哪里? – MNM

1

您可以用字符串化JSON.stringify(JSONObject的)的JSON对象,并接受它的控制器字符串。

在控制器中,您可以使用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(); 
相关问题