2016-07-06 8 views
0

私はこのURLにPATCH要求を行う。この方法があります:BasicNetwork.performRequest:「URL」のために予期しない応答コード400 - バレーボールPATCHリクエスト

https://username.visualstudio.com/DefaultCollection/_apis/wit/workitems/8?api-version=1.0

は、このメソッドは何をするん:それは更新されますマイクロソフトのVisual Studioで、ID 8を持っているworkItem`s System.Title、 - のTeam Foundation Serverの

public void testPostVolley(String url) { 
    /*Post data*/ 
    JSONArray jsonBody = new JSONArray(); 
    JSONObject jsonObject = new JSONObject(); 
    try { 
     jsonObject.put("op","replace"); 
     jsonObject.put("path","/fields/System.Title"); 
     jsonObject.put("value","Welcome to the jungle"); 
     jsonBody.put(jsonObject); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    Log.d("JSON Array " , String.valueOf(jsonBody)); 

    JsonArrayRequest postRequest = new JsonArrayRequest(Request.Method.PATCH, url, 
      jsonBody, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        Log.d("Response Post Request", response.toString()); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        // Handle Error 
       } 
      }) { 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<String, String>(); 
      headers.put("Authorization", MainRecyclerListView.TOKEN); 
      headers.put("Content-Type", "application/json-patch+json"); 

      return headers; 
     } 
    }; 
    queue.add(postRequest); 
} 

}

私はPOSTMANワットで試してみました同じヘッダーと同じボディとそれは動作しますが、Androidアプリでは私はこの応答を得ています:

07-06 13:05:49.253 2599-11381/ro.webivo.pockettask E/Volley:[209] BasicNetwork.performRequest:

7月6日13:05:49.017 2599から2599/ro.webivo.pockettask D Iはまた、送信本体I`mにログインしhttps://username.visualstudio.com/DefaultCollection/_apis/wit/workitems/8?api-version=1.0

ための予期しない応答コード400は、この一つであります/ JSON配列:[{"op": "replace"、 "path": "/ fields/System.Title"、 "value": "ジャングルへようこそ"}]

PATCHの公式APIリクエストがありますここ:

https://www.visualstudio.com/en-us/docs/integrate/api/wit/work-items

あなたは私を助けていただけますか?これはバレー問題ですか?

は、私は私の問題への解決策を見つけた検索の2日後、あなた

+0

VSTS Rest APIから「400 Bad Request」を受け取ったときに、応答本体にエラーメッセージが表示されます。本体メッセージを確認して共有できますか? AndroidのVolleyに関する似たような質問:http://salesforce.stackexchange.com/questions/50382/requestforupdate-always-returns-400 –

+0

VolleyErrorレスポンスのエラーメッセージは、私があなたに与えたものです。エラーレスポンスをカスタマイズする方法を知っていますか? – dragosiv

+0

私はPOSTにRequest.Methodを変更し、headers.put( "X-HTTP-Method-Override"、 "PATCH");のような異なるヘッダーを追加しようとしましたが、今回はVSSからいくつかのJSONを取得していましたContent-Type of application/json-patch + jsonのみを受け入れるサービス。私はそれを変更しましたが、私は再び400と何も答えません。私はerror.networkresponse.dataを記録しようとしましたが、それはnullになります。何か案が? – dragosiv

答えて

0

ありがとうございます。私はちょうど私がPATCH要求をしていたやり方を変えました。私は、この要求に対して、VolleyからHttpClientおよびHttpCoreライブラリに変更しました。

JSONArray jsonBody = new JSONArray(); 
JSONObject jsonObject = new JSONObject(); 

try { 
    jsonObject.put("op", "replace"); 
    jsonObject.put("path", "/fields/System.Title"); 
    jsonObject.put("value", title); 
    jsonBody.put(jsonObject); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

HttpClient hc = new DefaultHttpClient(); 
String message; 

HttpPost updateResultsPost = new HttpPost(url); 


try { 
    message = jsonBody.toString(); 


    updateResultsPost.setEntity(new StringEntity(message, "UTF8")); 
    updateResultsPost.setHeader("Authorization", MainRecyclerListView.TOKEN); 
    updateResultsPost.setHeader("X-HTTP-Method-Override", "PATCH"); 
    updateResultsPost.setHeader("Content-type", "application/json-patch+json"); 
    HttpResponse resp = hc.execute(updateResultsPost); 
    if (resp != null && resp.getStatusLine().getStatusCode() == 200) { 
     String responseBody = EntityUtils.toString(resp.getEntity()); 
     JSONObject jsonUpdatedResponse = new JSONObject(responseBody); 
     Log.d("Status line", "" + String.valueOf(jsonUpdatedResponse)); 

    } 

} catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

これが他の人に役立つことを願っています。

+0

サーバが 'X-HTTP-Method-Override'をサポートしていない場合はどうなりますか? –

関連する問題