hese
hese

Reputation: 3417

rest url - having '/' as a path VALUE

I think this is not possible, but I need confirmation before throwing it away...

I have a GET REST endpoint with this pattern

/networks/{networkId}/publishers/{publisherId}/ratings

the problem I am facing is, publisherId could have '/' in its id, like the id could be "opt/foo/bar" (we have not control over this id, it is given to us by our clients).

So

/networks/68/publishers/opt/foo/bar/ratings - obviously does not work, getting a url not fond error. /networks/68/publishers/opt%2ffoo%2fbar/ratings - also does not work. same error.

I know passing it as a query param will work. But I want to know if there is a way to make it work having it as a path param?

Thanks!

Upvotes: 1

Views: 1179

Answers (2)

Kynth
Kynth

Reputation: 2607

URL encoding is the right way to go but it looks like your container is decoding the slash before Jersey receives it.

Assuming you are using Tomcat, you can attempt to persuade Tomcat to allow the encoding, try:

tomcat/bin/setenv.bat
set 
CATALINA_OPTS="-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true"

I don't know if other containers have similar issues and settings.

Upvotes: 2

Szocske
Szocske

Reputation: 7661

I have not tried this, but theoretically this should work in Jersey:

@Path("/networks/{networkId}/publishers/")
@GET
public String get(@PathParam("networkId") String networkId, @Context UriInfo ui) {
  java.util.List<PathSegment> segments = ui.getPathSegments();
  // Last segment is "ratings", the rest is your publisherId.
}

Upvotes: 2

Related Questions