That is my fallback plan and isn't that much extra work. Was just wanting to see if JAX-RS had a way to help with it.
On Tue, Jun 23, 2015 at 6:22 PM, Craig McClanahan <[email protected]> wrote: > I tend to prefer solutions to things like this that will be obviously > understood when I pass responsibility for the code on to someone else in > the future, especially if that person is (like me) not particularly fluent > at regexp syntax :-). How about just going for two resource methods with > individual paths (/{tenant}/resource{id} and /resource/{id}) and having > them both call a common service method that takes tenant and id parameters, > and the second one passes null for the tenant? > > Craig > > > On Tue, Jun 23, 2015 at 5:42 PM, Kevin Schmidt <[email protected]> > wrote: > > > I have a situation where I'd like a @PathParam to be optional. For > example > > I'd like for the path /{tenant}/resource/{id} to be matched for both > > .../myTenant/resource/12345 and .../resource/12345, the second case > passing > > in null for the tenant @PathParam. > > > > I did some research and it seemed like using a regex in my @Path would do > > the trick, but I've been unable to get it to work. And in one case, I'm > > getting behavior that seems to be a bug? > > > > Here is what I've done: > > > > @GET > > @Path("/{tenant : [^/]*}/resource/{id}") > > @Produces({MediaType.APPLICATION_JSON}) > > public Response getResource(@PathParam("tenant") String tenant, > > @PathParam("id") String id) { > > ... > > } > > > > When I use the above with a URI .../t1/resource/12345 I get tenant=t1 and > > id=12345 as expected, so all is well. > > > > If I use .../resource/12345 I get a "No operation matching request path" > in > > my log. > > > > If I use ...//resource/12345 I oddly get tenant=12345 and id=null. > > > > It is this last case that seems odd, even if my regex in @Path isn't > fully > > correct, I'd still expect tenant=null and id=12345 in this case. So is > > this a bug? Or is there an explanation for it? > > > > But more importantly, is there a regex I can use to have tenant=null > when I > > use .../resource/12345 and tenant=t1 when I use .../t1/resource/12345? > > > > FWIW, if I try this @Path: > > > > @Path("/{tenant : ([^/]*)?}/resource/{id}") > > > > I get tenant=t1 and id=t1 which also doesn't seem right. Another bug? > > > > I'm using CXF as part of Camel 2.15.1 running in Karaf 3.0.x. > > > > Thanks, > > > > Kevin > > >
