2011-05-04 9 views
4

GWT의 JsonpRequestBuilder를 사용하여 응답이 JSON 객체 인 교차 사이트 REST 요청을 발행하고 있습니다.JsonpRequestBuilder를 사용하여 JSON 문자열을 가져 오는 방법

requestObject 메서드의 콜백 매개 변수는 JavaScriptObject입니다. 하지만 JavaScriptObject를 구현하는 대신 JSON 응답을 직접 구문 분석하려고합니다. 어쨌든 JavaScriptObject 또는 JsonpRequestBuilder의 모든 메서드에서 직접 JSON 문자열을 가져올 수 있습니까?

답변

6

당신은, (심각, 당신은 더 나은 JavaScriptObject의 쓰기 것,이 JSON 모듈은 작업 할 피타입니다) 단순히 JSONObject 또는 JSONArray에 반환 된 JavaScriptObject을 포장 할 수 있습니다

new JSONObject(myJavaScriptObject) 
+1

이것은 저에게 효과적입니다. 정확히 제가 원했던 것, 감사합니다! 나는 당신에게 투표권을주기에 충분한 명성을 얻었 으면 좋겠다. –

1

requestObject 대신 requestString을 사용하십시오. 이와 같이 :

JsonpRequestBuilder jsonp = new JsonpRequestBuilder(); 
jsonp.requestString(url, 
    new AsyncCallback<String>() { ... 

JavaScriptObject 대신 String을 반환합니다. 당신이처럼 JSONParser를 사용 후 사용할 수 있습니다 : 당신이 com.google.gwt.json.JSON 모듈을 사용하려면

JSONObject value = (JSONObject)JSONParser.parseStrict(jsonString); 

Person person = new Person(); 
person.setName(value.get("Name").isString().stringValue()); 
+0

AsyncCallback 대신 AsyncCallback 을 시도했을 때 콜백 onSuccess를 얻을 수 없거나 onFailure가 호출되었습니다. –

+0

예,이 버전을 사용할 수 없습니다. 파이어 폭스에서는 클래스 캐스팅 예외가 발생합니다. – user291701

+2

서버가 문자열을 반환 할 때'requestString()'을 사용합니다 (예 :''{ "name": "Brad"} "'- 아포 스트로피에주의하십시오). 서버가 자바 스크립트 객체 (예 :'{ "name": "Brad"}'와 같은 적절한 JSON 값)를 반환하면'requestObject()'를 사용해야합니다. 잘못된 클래스를 사용하면 ClassCastException이 발생합니다. – Attila

1

@Gu 봅니다 생성 된 JSON에서 따옴표를 이스케이프합니다.

JsonpRequestBuilder jsonp = new JsonpRequestBuilder(); 
    jsonp.setCallbackParam("jsonpcallback"); 
    jsonp.requestString(....); 

추신 :

String jsonCallback = request.getParameter("jsonpcallback") //or any other name 
    StringBuilder response = new StringBuilder(); 
    responseBody.append(jsonCallback).append("(\"").append(json).append("\");"); 

이 코드는 클라이언트 측에서 나를 위해 작동 다음과 같이 서버 측 코드에서 예를 들어 랩 결과 문자열보다

json = json.replace("\"", "\\\"") 

를 넣어 죄송합니다. 이미 주어진 대답에 대해 논평하기에 충분한 점수가 없습니다.

관련 문제