简体   繁体   English

从Java应用程序到TFS REST API的HTTP PATCH请求收到400(错误请求)错误

[英]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. 我正在尝试通过Java代码向TFS REST API发出HTTP PATCH请求。 But I'm getting the 400 bad request code. 但是我得到了400个错误的请求代码。 My POST and GET methods are working from java. 我的POST和GET方法从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 响应码: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 {} . 它不需要{}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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