2013-08-30 168 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(); 
相關問題