As seen in the documentation, the standard way of declaring a route in Quarkus is with the @Path()
annotation, like so :
JavaScript
x
@Path("myPath")
public class Endpoint {
@GET
public String hello() {
return "Hello, World!";
}
}
This will create the route GET /MyPath
. However, @Path
being an annotation, I have to give it constant expression.
I would like to be able to declare a route with a non constant expression, something like @Path(MyClass.class.getSimpleName())
I tried to implement something like this:
JavaScript
public class Endpoint {
public void initialize(@Observes StartupEvent ev) {
declareRoute(MyClass.class.getSimpleName(), HttpMethod.GET, this::hello);
}
public String hello() {
return "Hello, World!";
}
public void declareRoute(String path, HttpMethod method, Consumer handler) {
// TODO implement
}
}
This would create the route GET /MyClass
But I have no idea how to implement declareRoute()
. I tried to inject the Vertx Router
since Quarkus seems to use it, but I did not find a way to add a route. Is this doable, and if so, how ?
Advertisement
Answer
You essentially need to do something like:
JavaScript
@ApplicationScoped
public class BeanRegisteringRoute {
void init(@Observes Router router) {
router.route("/my-path").handler(rc -> rc.response().end("Hello, World!"));
}
}
See this for more information