jsr370-experts@jax-rs-spec.java.net

Re: Default for missing _at_Path

From: <markus_at_headcrashing.eu>
Date: Mon, 29 Feb 2016 19:46:13 +0100

Bill,

no need to imply that I did not read the Javadocs -- I did several
times before asking.

Here is the full JavaDoc of @Path annotation as of v2.0. Please tell
me where it says what Jersey will do in case no @Path is found
anywhere in a JAX-RS resource class (yes, it talks about base URIs,
but it does not say that the default for the annotation's value must
be "/" or "" which is possibly what you imply and which is NOT what
Jersey does). BTW, it DOES need explanation as I was asked that very
question several times, so it is everything but unambiguous for others:

   @Target(value={TYPE,METHOD})
    @Retention(value=RUNTIME)
    @Documented
   public @interface Path
   Identifies the URI path that a resource class or class method will
serve requests for.
   Paths are relative. For an annotated class the base URI is the
application path, see ApplicationPath. For an annotated method the
base URI is the effective URI of the containing class. For the
purposes of absolutizing a path against the base URI , a leading '/'
in a path is ignored and base URIs are treated as if they ended in
'/'. E.g.:

   @Path("widgets")
    public class WidgetsResource {
     @GET
     String getList() {...}

     @GET @Path("{id}")
     String getWidget(@PathParam("id") String id) {...}
    }
   In the above, if the application path is catalogue and the
application is deployed at http://example.com/, then GET requests for
http://example.com/catalogue/widgets will be handled by the getList
method while requests for http://example.com/catalogue/widgets/nnn
(where nnn is some value) will be handled by the getWidget method. The
same would apply if the value of either @Path annotation started with
'/'.

   Classes and methods may also be annotated with Consumes and
Produces to filter the requests they will receive.

-Markus

> Go read the Javadoc for @Path. It is explained there and IMO, needs
> no further explanation.
>
>
> On 2/29/2016 12:32 PM, markus_at_headcrashing.eu wrote:
>> According to the current wording of the JAX-RS 2.0 specification, a
>> compliant JAX-RS resource class not necessarily must have a @Path
>> annotation (it is enough to have @GET for example). Maybe I am
>> blind, but I cannot see an explanation what the default path shall
>> be in case no @Path is found. So my question is:
>>
>> How do Jersey / CXF / RestEasy handle this case currently, and
>> won't it be a good idea if we add a short note to the JAX-RS 2.1
>> spec how it SHALL be like?
>>
>> -Markus