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