Сначала экземпляр Vertx
в классе io.vertx.core.AbstractVerticle
ссылается на io.vertx.core.Vertx
, а не на io.vertx.rxjava.core.Vertx
. Таким образом, вы должны импортировать io.vertx.ext.web.Router
, а не io.vertx.rxjava.ext.web.Router
, иначе он не будет соответствовать.
Во-вторых, метод Route#route
не является статическим, поэтому сначала вам нужно создать экземпляр Router:
Router router = Router.router(vertx);
А затем вызовите метод маршрута:
router.route("/Test1").handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response.setChunked(true);
response.write("Test1 \n");
routingContext.vertx().setTimer(1000, tid -> routingContext.next());
});
Обратите внимание, что метод route
не принимает абсолютный URL-адрес, поэтому вам не нужно передавать абсолютный URL-адрес. Непосредственно передайте /Test1
URL-путь, и хост и порт можно настроить при createHttpServer.
Еще одно замечание: если вы хотите записывать байты непосредственно в ответ, вы должны добавить response.setChunked(true)
, иначе будет сгенерировано исключение:
java.lang.IllegalStateException: You must set the Content-Length header to be the total size of the message body BEFORE sending any data if you are not using HTTP chunked encoding.
Или это лучше (всегда wnd с end
):
router.route("/Test1").handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response.putHeader("content-type", "text/html");
response.end("<h1>Test1</h1>");
});
К настоящему времени вы установили простой маршрут, поэтому следующим шагом будет создание HttpServer:
vertx.createHttpServer()
.requestHandler(router::accept)
.listen(8080, "127.0.0.1", res -> {
if (res.failed())
res.cause().printStackTrace();
});
Что ж, порт и хост можно передать методу listen
.
Итак, это измененный правильный код:
import io.vertx.core.AbstractVerticle;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Router;
public class TestVerticle extends AbstractVerticle {
@Override
public void start(Future<Void> startFuture) throws Exception {
Router router = Router.router(vertx);
router.route("/Test1").handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response.setChunked(true);
response.write("Test1 \n");
routingContext.vertx().setTimer(1000, tid -> routingContext.next());
});
vertx.createHttpServer()
.requestHandler(router::accept)
.listen(8080, "127.0.0.1", res -> {
if (res.succeeded())
startFuture.complete();
else
startFuture.fail(res.cause());
});
}
}
Запустите это, развернув вертикаль:
public class Application {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
TestVerticle verticle = new TestVerticle();
vertx.deployVerticle(verticle, res -> {
if (res.failed())
res.cause().printStackTrace();
});
}
}
Это всего лишь простой пример. И если вы хотите создать службу RESTful, эта статья может помочь: Отдохни с Vert.x
А вот мой пример службы RESTful с использованием Vert.x Web, который также может помочь: https://github.com/sczyh30/todo-backend-vert.x
Надеюсь, это поможет вам :)
person
Eric Zhao
schedule
26.03.2016