diff --git a/extensions/vertx-http/deployment/src/test/java/io/quarkus/vertx/http/router/RouterEventTest.java b/extensions/vertx-http/deployment/src/test/java/io/quarkus/vertx/http/router/RouterEventTest.java index 5ea618a1b521d..7d0ab4e8c0d5f 100644 --- a/extensions/vertx-http/deployment/src/test/java/io/quarkus/vertx/http/router/RouterEventTest.java +++ b/extensions/vertx-http/deployment/src/test/java/io/quarkus/vertx/http/router/RouterEventTest.java @@ -36,6 +36,7 @@ public void testRoute() { RestAssured.given() .body("An example body") + .contentType("text/plain") .post("/post") .then() .body(is("An example body")); @@ -50,6 +51,7 @@ void observeRouter(@Observes Router router) { counter++; router.get("/boom").handler(ctx -> ctx.response().setStatusCode(200).end("ok")); Route post = router.post("/post"); + post.consumes("text/plain"); post.handler(BodyHandler.create()); post.handler(ctx -> ctx.response().end(ctx.getBody())); } diff --git a/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/ResumingRouter.java b/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/ResumingRouter.java index e2d8086758ab8..3867071857205 100644 --- a/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/ResumingRouter.java +++ b/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/ResumingRouter.java @@ -1,7 +1,10 @@ package io.quarkus.vertx.http.runtime; import java.util.List; +import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; import io.vertx.core.Handler; import io.vertx.core.http.HttpMethod; @@ -181,33 +184,41 @@ public Route patch(String path) { @Override public Route patchWithRegex(String regex) { - return delegate.patchWithRegex(regex); + return new ResumingRoute(delegate.patchWithRegex(regex)); } @Override public List getRoutes() { - return delegate.getRoutes(); + return Optional.ofNullable(delegate.getRoutes()) + .map(List::stream) + .orElseGet(Stream::empty) + .map(ResumingRoute::new) + .collect(Collectors.toList()); } @Override public Router clear() { - return delegate.clear(); + delegate.clear(); + return this; } @Override public Router mountSubRouter(String mountPoint, Router subRouter) { - return delegate.mountSubRouter(mountPoint, subRouter); + delegate.mountSubRouter(mountPoint, subRouter); + return this; } @Override @Deprecated public Router exceptionHandler(Handler exceptionHandler) { - return delegate.exceptionHandler(exceptionHandler); + delegate.exceptionHandler(exceptionHandler); + return this; } @Override public Router errorHandler(int statusCode, Handler errorHandler) { - return delegate.errorHandler(statusCode, errorHandler); + delegate.errorHandler(statusCode, errorHandler); + return this; } @Override @@ -221,9 +232,9 @@ public void handleFailure(RoutingContext context) { } @Override - public Router modifiedHandler(Handler handler) { - return delegate.modifiedHandler(handler); + delegate.modifiedHandler(handler); + return this; } @Override @@ -240,82 +251,98 @@ private ResumingRoute(Route route) { @Override public Route method(HttpMethod method) { - return route.method(method); + route.method(method); + return this; } @Override public Route path(String path) { - return route.path(path); + route.path(path); + return this; } @Override public Route pathRegex(String path) { - return route.pathRegex(path); + route.pathRegex(path); + return this; } @Override public Route produces(String contentType) { - return route.produces(contentType); + route.produces(contentType); + return this; } @Override public Route consumes(String contentType) { - return route.consumes(contentType); + route.consumes(contentType); + return this; } @Override public Route order(int order) { - return route.order(order); + route.order(order); + return this; } @Override public Route last() { - return route.last(); + route.last(); + return this; } @Override public Route handler(Handler requestHandler) { - return route.handler(new ResumeHandler(requestHandler)); + route.handler(new ResumeHandler(requestHandler)); + return this; } @Override public Route blockingHandler(Handler requestHandler) { - return route.blockingHandler(new ResumeHandler(requestHandler)); + route.blockingHandler(new ResumeHandler(requestHandler)); + return this; } @Override public Route subRouter(Router subRouter) { - return route.subRouter(subRouter); + route.subRouter(subRouter); + return this; } @Override public Route blockingHandler(Handler requestHandler, boolean ordered) { - return route.blockingHandler(new ResumeHandler(requestHandler), ordered); + route.blockingHandler(new ResumeHandler(requestHandler), ordered); + return this; } @Override public Route failureHandler(Handler failureHandler) { - return route.failureHandler(new ResumeHandler(failureHandler)); + route.failureHandler(new ResumeHandler(failureHandler)); + return this; } @Override public Route remove() { - return route.remove(); + route.remove(); + return this; } @Override public Route disable() { - return route.disable(); + route.disable(); + return this; } @Override public Route enable() { - return route.enable(); + route.enable(); + return this; } @Override public Route useNormalisedPath(boolean useNormalisedPath) { - return route.useNormalisedPath(useNormalisedPath); + route.useNormalisedPath(useNormalisedPath); + return this; } @Override @@ -335,7 +362,8 @@ public Set methods() { @Override public Route setRegexGroupsNames(List groups) { - return route.setRegexGroupsNames(groups); + route.setRegexGroupsNames(groups); + return this; } } } diff --git a/extensions/vertx-web/deployment/src/test/java/io/quarkus/vertx/web/SimpleRouteTest.java b/extensions/vertx-web/deployment/src/test/java/io/quarkus/vertx/web/SimpleRouteTest.java index 2248f480f5c2c..1b021317a6dfb 100644 --- a/extensions/vertx-web/deployment/src/test/java/io/quarkus/vertx/web/SimpleRouteTest.java +++ b/extensions/vertx-web/deployment/src/test/java/io/quarkus/vertx/web/SimpleRouteTest.java @@ -20,6 +20,7 @@ import io.quarkus.vertx.ConsumeEvent; import io.restassured.RestAssured; import io.vertx.core.eventbus.EventBus; +import io.vertx.core.http.HttpMethod; import io.vertx.ext.web.Router; import io.vertx.ext.web.RoutingContext; @@ -43,6 +44,8 @@ public void testSimpleRoute() { RestAssured.when().delete("/delete").then().statusCode(200).body(is("deleted")); RestAssured.when().get("/routes").then().statusCode(200) .body(Matchers.containsString("/hello-event-bus")); + RestAssured.given().contentType("text/plain").body("world") + .post("/body").then().body(is("Hello world!")); } static class SimpleBean { @@ -71,6 +74,11 @@ void deleteHttpMethod(RoutingExchange exchange) { exchange.ok("deleted"); } + @Route(path = "/body", methods = HttpMethod.POST, consumes = "text/plain") + void post(RoutingContext context) { + context.response().setStatusCode(200).end("Hello " + context.getBodyAsString() + "!"); + } + } static class SimpleRoutesBean {