Ich mache einen Integrationstest, bei dem ich eine POST-Anforderung aufruft, die eine Datei an den Server sendet. Direkt nach dem POST rufe ich eine GET-Anforderung auf, die das Dokument abruft und eine Antwort erhält, die mir die Attribute dieses Dokuments angibt. Allerdings würde ich manchmal einen Fehler 404 erhalten, der besagt, dass das Dokument nicht existiert, bis ich es ein paar Sekunden später erneut ausführen werde.Warten, bis POST die Verarbeitung beendet, bevor GET-Request aufgerufen wird
Ich denke, der POST ist noch nicht fertig mit der Verarbeitung, also habe ich ein Thread.sleep zu 10 Sekunden warten, aber dieser Weg scheint nicht gut, da es länger warten könnte, als es braucht oder nicht lange genug warten. Gibt es eine Art "implizite Wartezeit", die es dem POST ermöglicht, die Verarbeitung zu beenden, bevor das GET angefordert wird?
Unten finden Sie einen Code-Schnipsel:
@Test
public void PostDocumentThenCheckIfDocumentExistThenRemove() throws IOException, InterruptedException {
try {
String str = fileToStringProcessing("C:/Users/Linh/Desktop/file.xml");
ResponseEntity<Message> postResponse = getRestTemplate().exchange(getUri() + "documents", HttpMethod.POST, new HttpEntity(str, getHeaders()), Message.class);
Thread.sleep(10000);
ResponseEntity<Account> getResponse = getRestTemplate().exchange(getUri() + "account/7452616052/documents?start=2015-01-01&end=2016-03-31", HttpMethod.GET, getHttpEntity(), Account.class);
ResponseEntity<Message> deleteResponse = getRestTemplate().exchange(getUri() + "documents/file.xml", HttpMethod.DELETE, getHttpEntity(), Message.class);
assertThat(postResponse.getStatusCode(), is(HttpStatus.CREATED));
assertThat(getResponse.getStatusCode(), is(HttpStatus.OK));
assertThat(deleteResponse.getStatusCode(), is(HttpStatus.OK));
}catch(HttpClientErrorException e) {
fail("Error! Status code " + e.getStatusCode());
}
}
Hier sind die 404-Fehler in der Konsole. Sie können sehen, dass der POST erfolgreich ist, aber nicht der GET. eine GET danach, nach ein paar Sekunden zu tun, wird eine erfolgreiche
11:56:32.700 [main] DEBUG o.s.web.client.RestTemplate - POST request for "https://dpdev.billing.com/tf/dp/documents" resulted in 201 (Created)
11:56:32.700 [main] DEBUG o.s.web.client.RestTemplate - Reading [com.digitalplatform.model.Message] as "application/xml" using [org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConver[email protected]]
11:56:32.904 [main] DEBUG o.s.web.client.RestTemplate - Created GET request for "https://dpdev.billing.com/tf/dp/account/7452616052/documents?start=2015-01-01&end=2016-03-31"
11:56:32.914 [main] DEBUG o.s.web.client.RestTemplate - Setting request Accept header to [application/xml, text/xml, application/json, application/*+xml, application/*+json]
11:56:33.690 [main] DEBUG o.s.web.client.RestTemplate - GET request for "https://dpdev.billing.com/tf/dp/account/7452616052/documents?start=2015-01-01&end=2016-03-31" resulted in 404 (Not Found); invoking error handler
GET zeigen und DELETE Anfrage direkt nach dem 404:
12:00:21.383 [main] DEBUG o.s.web.client.RestTemplate - Created GET request for "https://dpdev.billing.com/tf/dp/account/7452616052/documents?start=2015-01-01&end=2016-03-31"
12:00:21.444 [main] DEBUG o.s.web.client.RestTemplate - Setting request Accept header to [application/xml, text/xml, application/json, application/*+xml, application/*+json]
12:00:23.176 [main] DEBUG o.s.web.client.RestTemplate - GET request for "https://dpdev.billing.com/tf/dp/account/7452616052/documents?start=2015-01-01&end=2016-03-31" resulted in 200 (OK)
12:00:23.176 [main] DEBUG o.s.web.client.RestTemplate - Reading [com.digitalplatform.model.Account] as "application/xml" using [org.springfr[email protected]37271612]
12:00:23.380 [main] DEBUG o.s.web.client.RestTemplate - Created DELETE request for "https://dpdev.billing.com/tf/dp/documents/file.xml"
12:00:23.381 [main] DEBUG o.s.web.client.RestTemplate - Setting request Accept header to [application/xml, text/xml, application/json, application/*+xml, application/*+json]
12:00:25.120 [main] DEBUG o.s.web.client.RestTemplate - DELETE request for "https://dpdev.billing.com/tf/dp/documents/file.xml" resulted in 200 (OK)
12:00:25.120 [main] DEBUG o.s.web.client.RestTemplate - Reading [com.digitalplatform.model.Message] as "application/xml" using [org.springfr[email protected]37271612]
Aktualisierte Frage mit vollem Code. Wahrscheinlich hätte er die ganze Methode aufstellen sollen. Beim POST bekomme ich einen 200 OK-Status, so dass der POST definitiv erfolgreich ist. Wird auch später mit den Konsoleninformationen aktualisiert – LinhSaysHi