我有vert.x应用程序。在我的Verticle中,我有这样的路线来执行后请求:
router.post("/api/1").handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response
.putHeader("content-type", "text/html")
.end("Response from api");
});
好的,我想测试这个请求。
为此,我创建了单元测试:
@Test
public void testApi1(TestContext context) {
Async async = context.async();
HttpClient client = vertx.createHttpClient();
HttpClientRequest request = client.post(8080, "localhost", "api/1", response -> {
System.out.println("Some callback " + response.statusCode());
async.complete();
});
String body = "{'username':'www','password':'www'}";
request.putHeader("content-length", "1000");
request.putHeader("content-type", "application/x-www-form-urlencoded");
request.write(body);
request.end();
}
但是当我尝试执行此测试时,我总是得到404错误。为了定义这个我使用Postman(REST-client)的原因。它使用以下请求:
POST /api/1 HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
Postman-Token: 6065383d-8f51-405c-08fd-9cc824a22f92
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
此请求也返回404。
很奇怪。
所以我决定用JavaScript创建简单的post-request - 我使用了非常简单的JQuery代码:
$.post("/api/1");
它返回正确的字符串,我期待。
谁能解释我这三个问题之间的区别。
答案 0 :(得分:2)
在你的
HttpClientRequest request = client.post(8080, "localhost", "api/1", response -> {
...
你错过了" /"在一开始,它应该是:
HttpClientRequest request = client.post(8080, "localhost", "/api/1", response -> {
...