2013-07-12 2 views
1

가정하자, 내가 가지고있는 경우 JSON 데이터와 같은,스프링 컨트롤러로 JSON을 보내고 파싱 하시겠습니까?

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

내가 JQueryAjax에서

var jsonData = JSON.Stringfy(json); 

하여 JSON 데이터를 보낼 수

data = jsonData , 

내가에서 JSON 데이터를 분석 할 수 스프링 컨트롤러,

내가 좋아하는 JSON에서 여러 사람이 정보를 전송해야하는 경우

어떻게,의 Spring controllerJSON을 구문 분석 할 수

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

Json Array 내의 JsonObject에서 각 구성원 세부 정보를 전송 한 다음 배열을 반복하고 개별 JSON 개체를 가져올 수 있습니다. JSON의 문서에서 데이터를 얻고 설정하는 데 사용할 수있는 모든 방법을 볼 수 있습니다.

GSON (google -json)을 사용하는 것이 좋습니다. 메모리 친화적입니다.

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

--EDITED을 AND ADDED EXAMPLE-- 내가 로컬이 테스트 한

그것은 나를 위해 작동합니다 :)

3

이 작동합니다.

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 : 여기

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;                 
    }                  
}   

테스트 결과 (내가 곱슬 곱슬와 함께 테스트)입니다 : 여기에 코드입니다. 때때로 JSON 요청이 컨트롤러에 도달하기 전에 실패 할 때 스프링 MVC에서 디버그 정보를 얻는 것이 어렵습니다. 디버그 정보를 얻으려면, 어떤 경우에는 추적 할 스프링 MVC의 디버그 레벨을 설정해야합니다. JSON 요청이 실패한 이유를 나는 보통 내가 확인해야 할 때 내 log4j.properties이 추가 :

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 
    } 
} 
관련 문제