Ben George
Ben George

Reputation: 1005

Jersey + Guice can't mix non-jersey resources with jersey resources

How can I use non-jersey resources with jersey resources with guice ?

I want "/" to be handled by a plain servlet. But I want "/users" handled by jersey.

Say I have a jersey resource with @Path("/users"). Using the following bindings will not work, it tries to map the "/" request using jersey which of course is not a jersey resource and I get 404.

protected void configureServlets() {
    serve("/").with(LoginServlet.class);
    serve("/*").with(GuiceContainer.class, params);
}

All of the examples of jersey / guice I can find do something like serve("/rest/*".with(GuiceContainer.class, params); which DOES work for me ("/rest/users"), but I want nice URI's that don't have some arbitrary prefix like 'rest' or 'ws'.

Upvotes: 3

Views: 546

Answers (1)

chadum
chadum

Reputation: 338

You have an ambiguous match with "/" and "/*".

To handle this you can use the version of the serve method that allow a regular expression rather than a simple pattern.

For example, something like this may work:

serve("/").with(LoginServlet.class);
serveRegex("/.+").with(GuiceContainer.class, params);

The GuiceContainer mapping now requires at least one character after the slash.

Upvotes: 5

Related Questions