Я пытаюсь подключиться к API с помощью RestEasyWebTarget, и у меня нет проблемы при использовании, чтобы добраться до некоторых конечных точек, но теперь я хочу подключиться к конечной точке POST и PUT, и я получаю некоторый неверный запрос.Я думаю, что я могу делать это неправильно.
Я пробовал это с curl, и он работает
curl -u backendserver:password -X POST --header 'Accept:application/json; charset=utf-8' --header 'Content-Type:application/json; charset=utf-8' http://localhost:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/ramona/instances/_definst_/streamrecorders/jdc -d '
{
"instanceName": "",
"fileVersionDelegateName": "",
"serverName": "",
"recorderName": "jdc",
"currentSize": 0,
"segmentSchedule": "",
"startOnKeyFrame": true,
"outputPath": "",
"currentFile": "",
"saveFieldList": [
""
],
"recordData": false,
"applicationName": "",
"moveFirstVideoFrameToZero": false,
"recorderErrorString": "",
"segmentSize": 0,
"defaultRecorder": false,
"splitOnTcDiscontinuity": false,
"version": "",
"baseFile": "",
"segmentDuration": 0,
"recordingStartTime": "",
"fileTemplate": "",
"backBufferTime": 0,
"segmentationType": "",
"currentDuration": 0,
"fileFormat": "",
"recorderState": "",
"option": ""
}
'
{"success": true, "message": "Recorder Created", "data": null}
Поэтому я попытался имитировать это с помощью resteasy.Это мой код
public void grabar(final String streamName) throws InterruptedException {
System.out.println("Empezar a grabar");
clientREST = new ResteasyClientBuilder().build();
clientREST.register(new BasicAuthentication(userWowza, passWowza));
String targetStr = "http://" + host + ":" + portEndpoint + endPoint + app + "/instances/_definst_/streamrecorders/"+streamName;
//http://localhost:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/live/instances/_definst_/streamrecorders/myStream
System.out.println("target: " + targetStr);
ResteasyWebTarget target = clientREST.target(targetStr);
target.register(new BasicAuthentication(userWowza, passWowza));
StreamRecorderConfigDTO recorder = new StreamRecorderConfigDTO();
recorder.setRecorderName(streamName);
recorder.setCurrentSize(0);
recorder.setStartOnKeyFrame(true);
recorder.setRecordData(false);
recorder.setSegmentSize(0);
recorder.setDefaultRecorder(false);
recorder.setMoveFirstVideoFrameToZero(false);
recorder.setSplitOnTcDiscontinuity(false);
recorder.setSegmentDuration(0);
recorder.setBackBufferTime(0);
recorder.setCurrentDuration(0);
recorder.setFileFormat("MP4");
recorder.setApplicationName("ramona");
recorder.setBaseFile(streamName+".mp4");
Response response = target.request().
post(Entity.entity(recorder, "application/json; charset=utf-8"));
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}
response.close();
}
Но каждый раз я получаю 400 неверных запросов.Поэтому я предполагаю, что все указывает на то, что я неправильно передаю свой объект StreamRecorderConfigDTO.Должен ли я также публиковать свой класс StreamRecorderConfigDTO?
***** Обновление
Я изменил цель, добавив заголовки
Response response = target.request().header("Content-Type", "application/json; charset=utf-8").accept(MediaType.APPLICATION_JSON).post(Entity.entity(recorder, MediaType.APPLICATION_JSON));
int status = response.getStatus();
response.close();
if (status != 200) {
throw new RuntimeException("Failed : HTTP error code : " + status);
}