I need to resolve URI of current request in Quarkus (I use Quarkus 1.13). I use RESTEasy as my rest framework. Current request URI is needed in my case to validate Mandrill webhook call.
Simplified my current implementation looks like:
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("/api/v1/webooks/mandrill")
public class MandrillWebhookResource {
// code skipped for brevity
@POST
public Response mandrill(
@HeaderParam("x-mandrill-signature") String mandrillSignature,
@FormParam("mandrill_events") String mandrillEvents
) throws JsonProcessingException {
final var mandrillSignatureValid = mandrillSignatureValidator
.valid(/* here I need request URI */, mandrillSignature, mandrillEvents);
// code skipped for brevity
return Response.ok().build();
}
Advertisement
Answer
RESTEasy is implementation of JAX-RS and it provides facilities for obtaining and processing information about the context of individual requests.
JAX-RS has UriInfo class for that context. It provides both static and dynamic, per-request information, about the components of a request URI. You just need to use @Context annotation with UriInfo class to inject that context into your POST method.
It could be done like below:
@POST
public Response mandrill(
@Context UriInfo uriInfo,
@HeaderParam("x-mandrill-signature") String mandrillSignature,
@FormParam("mandrill_events") String mandrillEvents
) throws JsonProcessingException {
final var requestUri = uriInfo.getRequestUri();
final var mandrillSignatureValid = mandrillSignatureValidator
.valid(requestUri, mandrillSignature, mandrillEvents);
// code skipped for brevity
return Response.ok().build();
}