2013-07-12 108 views
1

想,如果我有JSON數據一樣,發送並解析JSON到彈簧控制器?

var json = {"name":"kite Player","age":"25","hobby":"footbal"} 

我可以

var jsonData = JSON.Stringfy(json); 

JQueryAjax發送JSON數據,

data = jsonData , 

我可以解析的JSON數據由彈簧控制器,

public class TestController { 
    @RequestMapping(method = RequestMethod.POST, value = "personDetails.html") 
    public @ResponseBody Result math(@RequestBody final Persons persons) { 

     String name = person.getName(); 
     String age = persons.getAge(); 
     String hobby = persons.getHobby(); 
     // Other process 
    } 
} 

我如何解析JSONSpring controller,如果我需要在JSON像發送多的人的詳細信息,

var json = [ {"name":"kite Player","age":"25","hobby":"footbal"}, 
      {"name":"Steve","age":"40","hobby":"fishing"}, 
      {"name":"Marker","age":"28","hobby":"cricket"} 
      ] 

希望我們的堆疊成員將提供一個很好的解決方案。

+0

使用解析庫像GSON!第二種情況是一個數組,任何JSON解析器都可以處理它。 – NINCOMPOOP

+0

我需要使用jakson –

+0

,請查看http://java2practice.wordpress.com/2013/03/14/how-to-pass-json-object-string-or-jsonarray-string-from-javascript-to -spring-controller/ –

回答

0

您可以將JsonObject中的每個成員詳細信息發送到Json數組中,然後您可以遍歷數組並獲取單個JSON對象。你可以看到所有可用的方法獲取和設置數據的JSON文檔。

另外,我會建議你使用GSON(谷歌-json)他們是內存友好。 :)

3

這應該工作:

@RequestMapping(method = RequestMethod.POST, value = "personDetails.html") 
public @ResponseBody Result math(@RequestBody List<Persons> personList) { ... } 

--EDITED並添加EXAMPLE--

我本地測試這一點,它爲我工作。這裏的代碼片段:

public class TestController { 
    public static class Test {              
     String name;                 

     public String getName() {              
      return name;                 
     }                    

     public void setName(String name) {           
      this.name = name;               
     }                    
    }                    


    @RequestMapping(value = "/debug/test1.json", method = RequestMethod.POST)  
    @ResponseBody                 
    public Test[] testList1(@RequestBody Test[] test) {       
     return test;                 
    }                    

    @RequestMapping(value = "/debug/test2.json", method = RequestMethod.POST)  
    @ResponseBody                 
    public List<Test> testList2(@RequestBody List<Test> test) {     
     return test;                 
    }                  
}   

以下是測試結果(我用捲曲測試吧):

Request: 
    curl --header "Content-type: application/json" --header "Accept: application/json" --data '[{"name": "John"}, {"name": "Jack"}]' http://localhost:8080/app/debug/test1.json 
    Response: 
    [{"name":"John"},{"name":"Jack"}] 

    Request: 
    curl --header "Content-type: application/json" --header "Accept: application/json" --data '[{"name": "John"}, {"name": "Jack"}]' http://localhost:8080/app/debug/test2.json 
    Response: 
    [{"name":"John"},{"name":"Jack"}] 

PS。有時候,當JSON請求在到達控制器之前失敗時,很難在Spring MVC中獲得任何調試信息。要獲得調試信息,在某些情況下,您需要設置spring MVC的調試級別來跟蹤。我通常將它添加到我的log4j.properties當我需要驗證爲什麼JSON請求失敗:

log4j.logger.org.springframework.web.servlet.mvc.method.annotation=TRACE 
+0

當我使用** @ RequestBody ** –

+0

時,請求沒有輸入到控制器中我編輯了我的答案以提供示例。當您的請求失敗時,您是否收到日誌中的任何例外情況? –

+0

但沒有幫助。 –

0

試試這個代碼

@RequestMapping(method = RequestMethod.POST, value = "personDetails.html") 
public @ResponseBody Result math(@RequestBody List<Persons> persons) { 
    for (Persons person : persons) { 
     String name = person.getName(); 
     String age = person.getAge(); 
     String hobby = person.getHobby(); 
     // Process the data 
    } 
}