2017-01-10 5 views
0

개조 본문에는 이름이없는 Json 배열을 전달하려고하지만 pojo.Below를 통해 이름이없는이 json 배열을 전달하려고합니다. json 배열을 전달하고 싶습니다. 또한 나는 이것을 위해 PATCH 메서드를 사용하고 있습니다.개조 본문에 요청으로 이름이없는 JsonArray를 전달하는 방법

[{ 
"op": "replace", 
"path": "/billing_address/line1", 
"value": "some other value"}] 

나는 다음과 같은 방법을 사용하고 있는데이 방법으로 나는 내가 원하는 목록 로그 캣에서 동일한 반응을 얻고 있지만 getAuthentionToken 내부를 통과 한 후 나는 400 오류를 얻고있다. 당신이 요청 본문을 통해 데이터를 전송하는 경우

 Call<JSONResponse> getAuthentionToken(@Body List obj); 


    JSONObject jobj = new JSONObject(); 
    jobj.put("op","replace"); 
    jobj.put("path","/billing_address/line1"); 
    jobj.put("value","some other value"); 


    List arrlist = new ArrayList(); 
    arrlist.add(jobj); 


    apiInterface.getAuthentionToken(arrlist).enqueue(new Callback<JSONResponse>() { 
+0

당신은 지금까지 시도 무엇? –

+0

json 객체를 만들고 json 배열 내부를 전달하여 json 배열을 전달하려고했습니다 ... logcat에서의 내 응답은 원했던 것과 동일하지만,이 json 배열 객체를 개조 본문에 전달할 때 error가 발생합니다. 그래서 나는 이것에 대해 pojo를 선택했지만 여전히 오류가 발생했습니다 – Sachin

+0

param 이름 (또는 필드 이름)을 지정해야합니다 – priyankvex

답변

0

다음은 저와 그 문제에 대한 올바른 답변입니다.

공용 클래스 CardUpdate는 {

public String op; 
public String path; 
public String value; 

public CardUpdate(String op, String path, String value) { 

    this.op = op; 
    this.path = path; 
    this.value = value; 
} 

public String getOp() { 
    return op; 
} 

public void setOp(String op) { 
    this.op = op; 
} 

public String getPath() { 
    return path; 
} 

public void setPath(String path) { 
    this.path = path; 
} 

public String getValue() { 
    return value; 
} 

public void setValue(String value) { 
    this.value = value; 
} 

@Override 
public String toString() { 
    /*return "CardUpdate{" + 
      "op='" + op + '\'' + 
      ", path='" + path + '\'' + 
      ", value='" + value + '\'' + 
      '}';*/ 

    return "{" +'"'+ 
      "op" + '"'+":" +'"' +op + '"'+ 
      "," + '"'+"path" + '"'+":" + '"'+ path + '"'+ 
      "," + '"'+"value" + '"'+":" + '"'+ value + '"'+ 
      '}'; 
} 

}

CardUpdate updatt = new CardUpdate("replace","/billing_address/line1","some other value"); 
    List<CardUpdate> cardddd = new ArrayList<CardUpdate>(); 
    cardddd.add(updatt); 
+0

설명을 자세히 추가하십시오 "왜"이것은 작동합니다. 응답 코드는 "이것은 답변입니다"그것이 무엇을 OP가주의 해야하는지 설명하지 않습니다. –

+0

안녕하세요.이 구조를 사용하여 성공적인 응답을 받고 있습니다. 개인 정보 보호를 위해 응답 및 URL을 넣을 수 없습니다. – Sachin

1

구현은 다음과 같이해야합니다 :

  1. 이 필드에 따라 모델을 정의 (대소 문자를 구분 "이름"-> 문자열 이름 등)
  2. 설정하여 API 함수는 또한 같은 그

@POST("/api/geo/getLoc") public void getFriendsLocation(@Body YourClass classObject, Callback<JsonElement> response);

    POST 요청에
  1. 를 사용하여 직접 만든 클래스 개체

    getFriendsLocation(yourClassObjectThatIncludesFields, new Callback ....);

당신의 당신은 GSON하여이 작업을 수행 할 수 PARAMS을 통해 데이터를 전송합니다.
1. 아이디, 번호와 같은 필드를 가지고 기능을 FriendNumber.Define 클래스가 있다고 가정하자 :

public static Map<String, Object> getMapFromObject(Object o) { 
    Gson gson = new Gson(); 
    Type stringObjectMap = new TypeToken<Map<String, Object>>() { 
    }.getType(); 
    return gson.fromJson(gson.toJson(o), stringObjectMap); 
} 

2.

@POST("/api/geo/getLoc") 
public void getFriendsLocation(@QueryMap Map<String, Object>,  Callback<JsonElement> response); 
처럼 또한 API 기능을 설정을
  1. 당신이 당신의 필드 아래 여기

    getFriendsLocation(getMapFromObject(yourClassObjectThatIncludesFields), new Callback ....);

    을 같이이 함수를 호출에서 POST 요청이 객체를 생성 보내는

클래스 정의 및 콜백 기능을 포함하는 전체 코드 작성은 사용자 정의에 달려 있기 때문에 작성하지 않았습니다. 나는 당신이 몸을 보내서 첫 번째 방법을 시도해야한다고 생각합니다.

+0

도움이되지 않으면 나에게 다시 연락해주세요! 그리고 upvote하는 것을 잊지 마세요! 북돋우다! –

+0

패치가 아닌 패치 방법을 사용하고 싶기 때문에 PATCH 메서드가 작동합니까? – Sachin

+0

이 질문의 첫 번째 대답보기 http://stackoverflow.com/questions/19797842/patch-request-android-volley –