简体   繁体   中英

HTTP PATCH request to TFS REST API from java application getting 400 (bad request) error

I'm trying to make an HTTP PATCH request via java code to TFS REST API. But I'm getting the 400 bad request code. My POST and GET methods are working from java.

I have the following code:

public static void patchCenas() throws MalformedURLException, IOException{
    URL url = new URL("http://servername:8080/tfs/DefaultCollection/Testing%20Project/_apis/wit/workitems/$Bug?api-version=1.0");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setConnectTimeout(15000);//15 secs
    connection.setReadTimeout(15000);//15 secs

    connection.setRequestProperty("X-HTTP-Method-Override", "PATCH");
    connection.setRequestMethod("POST");
    connection.setDoOutput(true);
    connection.setRequestProperty("Content-Type", "{\"Content-Type\":\"application/json-patch+json\"}");

    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());  
    out.write(
            "[" +
                  "{"+
                      "\"op\":\"add\"," +
                      "\"path\":\"/fields/System.Title\"," +
                      "\"value\":\"Bug with PATCH via java (Test)\""+
                  "}"+
            "]");
    out.flush();
    out.close();

    int res = connection.getResponseCode();
    System.out.println(connection.getResponseMessage());
    System.out.println(res);

    BufferedReader br = new BufferedReader(new InputStreamReader(((HttpURLConnection) url.openConnection()).getInputStream(), Charset.forName("UTF-8")));
    //InputStream is = connection.getInputStream();
    //BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String line = null;
    while((line = br.readLine() ) != null) {
        System.out.println(line);
    }
    connection.disconnect();
}

Messages:

Response Message: Bad Request

Response code: 400

line output:

{
   "fields": {
      "System.WorkItemType": "Bug",
      "System.AreaPath": "Testing Project",
      "System.TeamProject": "Testing Project",
      "System.IterationPath": "Testing Project",
      "System.State": "New",
      "System.Reason": "New defect reported",
      "Microsoft.VSTS.Common.StateChangeDate": "1753-01-01T00:00:00Z",
      "System.ChangedBy": "name>",
      "System.CreatedBy": "name>",
      "Microsoft.VSTS.Common.Priority": 2,
      "Microsoft.VSTS.Common.Severity": "3 - Medium",
      "Microsoft.VSTS.Common.ValueArea": "Business"
   },
   "_links": {
      "workItemType": {
         "href": "http://servername:8080/tfs/DefaultCollection/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/_apis/wit/workItemTypes/Bug"
      },
      "fields": {
         "href": "http://servername:8080/tfs/DefaultCollection/_apis/wit/fields"
      }
   },
   "url": "http://servername:8080/tfs/DefaultCollection/_apis/wit/workItems"
}

There is something wrong in my code?

I test the code snippet you posted above. The content type is not correct. Change it to:

connection.setRequestProperty("Content-Type", "application/json-patch+json"); 

It doesn't need {} .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM