I am using <a href="https://jersey.java.net/documentation/1.19/index.html" rel="nofollow">Jersey v1.x</a> and a <a href="https://github.com/google/guice/wiki/ServletModule" rel="nofollow">Guice Servlet</a>.
What I'm trying to do is bind a Jersey Resource that matches <em>any</em>
@Path, such that I can use Jersey to respond with a 404.
I'm looking to do this, since my servlet consists of different components (e.g. a rest API that lives under
/api, and a web UI that lives under
In Guice terms, that means I have several
ServletModules that each set up one part of the servlet:
serve("/api").with(GuiceContainer.class, conf)</li> <li>In my
serve("/").with(GuiceContainer.class, conf)</li> </ul>
In this setup, I want to define what the 404 response body looks like for each part of the webapp (
/) from the codebase of each subproject responsible, without having to reimplement Jersey
So far I have tried to bind a resource that match
@Path("/*"), but none of these seem to be picked up when I request
You need to use the regex format of the path expression, i.e.
You could inject
List<PathSegment> to look at all the segments if you need them.
public Response getSomething(@PathParam("any") List<PathSegment> segments)Answer2:
<a href="https://stackoverflow.com/users/2587435/" rel="nofollow">@peeskillet</a>'s <a href="https://stackoverflow.com/a/30834819/1296709" rel="nofollow">answer</a> is indeed correct, in the sense that it describes how you can create a Jersey resource that matches any path.<br /> However, my goal of creating a resource that delivers 404 responses for whenever any other unmatched path is requested is not quite met by this answer:
At least in combination with Guice, will such a "match all"-resource intercept all requests, regardless of whether any more specific resources are available. Additionally, you cannot modify the HTTP response status code from within a resource.
For this purpose, Jersey has
ExceptionMappers that can be implemented and loaded by adding the
@Provider annotation. One particular type would be a
ExceptionMapper<NotFoundException>, which is invoked when a Resource throws a
ExceptionMapper can then decide what response to generate, including the status code.