HTTP PATCH запрос к TFS REST API из Java-приложения, получающего ошибку 400 (неверный запрос)
Я пытаюсь сделать HTTP-запрос PATCH через Java-код TFS REST API. Но я получаю 400 неверный код запроса. Мои методы POST и GET работают с Java.
У меня есть следующий код:
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();
}
Сообщения:
Ответное сообщение: неверный запрос
Код ответа: 400
линейный выход:
{
"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"
}
Что-то не так в моем коде?
1 ответ
Решение
Я тестирую фрагмент кода, который вы разместили выше. Тип контента не правильный. Измените это на:
connection.setRequestProperty("Content-Type", "application/json-patch+json");
Это не нужно {}
,