users@jersey.java.net

Re: [Jersey] semicolon in path param

From: Paul Sandoz <Paul.Sandoz_at_oracle.com>
Date: Wed, 28 Jul 2010 10:39:15 +0200

On Jul 28, 2010, at 3:26 AM, Craig McClanahan wrote:

> On Tue, Jul 27, 2010 at 6:10 PM, trolly <trolly.s.rogers_at_gmail.com>
> wrote:
>
> Hi All - This probably has an obvious solution, but I just can't dig
> it up. I
> have a resource that has a path like this...
>
> /items/{id}
>
> The id path param is a String, and can contain semicolon. It appears
> that
> path params passed in with semicolons are split, and only the first
> token is
> being returned.
>
> This is because, according to the syntax specification for URLs[1],
> a semicolon is used to delimit path parameters in a path segment.
> If you really really want to use semicolons, you will need to URL
> encode them.
>

... also JAX-RS, by default, strips them out for matching, and refers
to them as matrix parameters which can be accessed using the
@MatrixParam [1] annotation.

In Jersey there is a feature to not strip out the matrix parameters,
see:

https://jersey.dev.java.net/nonav/apidocs/latest/jersey/com/sun/jersey/api/core/ResourceConfig.html
#FEATURE_MATCH_MATRIX_PARAMS

There is an error in the JavaDoc (i have just fixed) and it should read:

   If true matrix parameters (if present) in the request URI path
component will *not* be ignored when matching the path to URI
   templates declared by resource classes.

Paul.

[1] https://jsr311.dev.java.net/nonav/releases/1.1/javax/ws/rs/MatrixParam.html

> Better would be to use some sort of identifier that doesn't use any
> characters reserved by the specification (like '/' and ':'), but
> that's not always possible.
>
> Craig
>
> [1] http://www.ietf.org/rfc/rfc2396.txt
>