How to serve static content with JAX-RS?
Just found it.
According to the javax.ws.rs.Path
annotation javadocs one can specify a regex to indicate what is considered to be the template parameter match.
Hence, the following code works:
@Path("static")
public class StaticContentHandler {
...
@GET
@Path("{path:.*}")
public FileRepresentation Get(@PathParam("path") String path) {
...;
}
}
GET http://localhost:8182/static/yaba/daba/doo.png
reaches the Get
method with path
equal to "yaba/daba/doo.png" - just what I was looking for.
Hope it helps anyone.
BTW, FileRepresentation
belongs to Restlet, so a really pure JAX-RS implementation would return something else here.
Assuming that static folder is located here: ./src/main/resources/WEB-INF/static
in your project:
@Path("")
public class StaticResourcesResource {
@Inject ServletContext context;
@GET
@Path("{path: ^static\\/.*}")
public Response staticResources(@PathParam("path") final String path) {
InputStream resource = context.getResourceAsStream(String.format("/WEB-INF/%s", path));
return Objects.isNull(resource)
? Response.status(NOT_FOUND).build()
: Response.ok().entity(resource).build();
}
}
Here is full description with how-to example and repository: https://daggerok.github.io/thymeleaf-ee/#configure-jax-rs-serve-static-files-and-webjars