Http Post для WebClient
Я пытаюсь протестировать свою конечную точку Post с помощью WebClient of Vertx и всегда получаю 500 в качестве кода состояния. Может ли кто-нибудь сообщить мне, что я здесь делаю не так:-
final String jsonBody = "{\"url\": \"https://www.google.se\"}";
WebClient.create(vertx)
.post(8080, "::1", "/service")
.sendJson(
jsonBody,
response ->
testContext.verify(
() -> {
System.out.println(response.result().statusCode());
assertEquals("OK", response.result());
}));
2 ответа
Это должно сработать для вас. Я показываю и клиента, и обработчика. Клиент создаетJsonObject
из строки. Обработчик находится на сервере.
@Test
public void testPostURL(TestContext context) {
Async async = context.async();
final String body = "{\"url\": \"https://www.google.se\"}";
WebClient.create(vertx)
.post(8080, "localhost", "/service")
.putHeader("content-type", "application/json")
.sendJson( new JsonObject(body),
requestResponse -> {
context.assertEquals(requestResponse.result().statusCode(), 200);
async.complete();
});
}
Обработчик ожидает JsonObject и возвращает URL-адрес ( https://www.google.se/)
private void service(RoutingContext rc) {
HttpServerResponse response = rc.response();
JsonObject body = rc.getBodyAsJson();
String site = body.getString("url");
response.setStatusCode(200)
.putHeader("content-type", "application/json; charset=utf-8")
.end(Json.encodePrettily(site));
}
500 - это внутренняя ошибка сервера. В вашем случае он не получает необходимых данных.. Я думаю. Поэтому попробуйте отправить полезную нагрузку, используя
- Преобразуйте строку в jsonobject и отправьте нам метод sendJsonObject
- Преобразуйте буфер в jsonobject и отправьте метод usig sendBuffer