2013-05-06 8 views
0

JSerialization을 위해 Jersey와 Jackson을 사용하여 편안한 서비스를 작성하고 있습니다. 나는 의존성 주입을 위해 Spring을 사용하고 있는데, com.sun.jersey.spi.spring.container.servlet.SpringServlet (mvc를 사용하지 않음)도 사용하고있다. 나는 클라이언트 쪽에서 RestyGWT를 사용하고있다. 내 서비스에서 객체의 배열을 반환하는 중, 내 클라이언트가 유효한 JSON 문서가 아니라고 불평하고있다. 다음은 서비스가 반환하는 것입니다.Spring-Jersey-Jackson-JSON : 색인 요소로 묶인 배열 요소

{ 
    "0": { 
     "type": "AQUISITION_DT", 
     "value": "2013-2-1", 
     "stats": { 
      "total": 91, 
      "used": 4 
     } 
    }, 
    "1": { 
     "type": "AQUISITION_DT", 
     "value": "2013-1-1", 
     "stats": { 
      "total": 24, 
      "used": 13 
     } 
    } 
} 

확실하지 않지만 문제는 각 요소가 색인에 의해 래핑된다는 것입니다. 저지 또는 잭슨에게 배열 요소의 포장을 풀도록 지시 할 수있는 방법이 있습니까? 자세한 정보를 제공해야하는 경우 알려 주시기 바랍니다. 코드에서

는 그래서 같은 JSONWithPadding 개체로 결과를 다시 보내고있다 : return new JSONWithPadding(array, callback);

을 BTW, 이미 POJO 매핑을 사용하는 내 web.xml에 저지를 구성한 :

<init-param> 
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
    <param-value>true</param-value> 
</init-param> 

업데이트 터미널에서 컬 (curl) 테스트를했는데 반환 된 문자열이 정확합니다 (콜백 인클로저를 제거했습니다).

{ 
    { 
     "type": "AQUISITION_DT", 
     "value": "2013-2-1", 
     "stats": { 
      "total": 91, 
      "used": 4 
     } 
    }, 
    { 
     "type": "AQUISITION_DT", 
     "value": "2013-1-1", 
     "stats": { 
      "total": 24, 
      "used": 13 
     } 
    } 
} 

원래 게시 한 문자열이 restyGWT에 의해보고되고 있습니다. 혼란스러워서 죄송합니다. 왜 restyGwt가 불평하고 있는지 잘 모르겠습니다 ...

Thanks!

+0

코드에서 JSON을 어떻게 반환합니까? – Willy

+0

1) Willy가 말한 것처럼 대괄호가 있어야합니다. 2) 우리가 당신을 도우려는 경우에는 클라이언트 측 코드를 붙여 넣어야합니다. restService 인터페이스에서 배열을 가져 오는 중 콜백의 유형이 무엇입니까? –

답변

0

이 문제를 해결할 수있는 유일한 방법은 다음과 같습니다. 그 결과를 대상으로 랩핑하십시오. 원래 배열을 반환했습니다 (MyObject[]). 지금은 MyObjectListing 반환 해요 : MyObjectListing을 반환하는 문제를 해결

public class MyObjectListing { 
    MyObject[] objects; 
    ... 
    //getters/setters, etc. 
} 

을 ... 그 이유를 이해하지 않습니다.

0

당신이 객체의 배열을 반환 할 경우, JSON 형식은 쉽게

@Path("/test") 
@GET   
@Produces(MediaType.APPLICATION_JSON) 
public Test[] haha(){ 
    Test[] arr = new Test[3]; 
    arr[0] = new Test(); 
    arr[1] = new Test(); 
    arr[2] = new Test(); 
    return arr; 
} 

아래의 경우 테스트 클래스처럼 자원의 방법으로 배열을 반환 할 수 있습니다

[ 
    { 
     "type":"AQUISITION_DT", 
     "value":"2013-2-1", 
     "stats":{ 
     "total":91, 
     "used":4 
     } 
    }, 
    { 
     "type":"AQUISITION_DT", 
     "value":"2013-1-1", 
     "stats":{ 
     "total":24, 
     "used":13 
     } 
    } 
] 

아래처럼한다 다음과 같습니다

public class Test { 
    public String type="AQUISITION_DT"; 
    public String value = "2013-2-1"; 
    public Stats stats = new Stats(); 
} 

public class Stats { 
    public int total = 10; 
    public int used = 13; 
}