2013-07-04 20 views
7

Sto utilizzando la classe javax.ws.rs.Path nella mia classe REST per configurare il percorso. Si sta comportando in modo strano ... La mia configurazione è qualcosa del genere ... Questo non è un file vero, ma ho mostrato una replica per farti capire le mie configurazioni.Configurazione @Path a livello di classe e livello metodo

Class1

@Path("/v2") 
public class BoxResource {   
    @POST 
    @Path("/ie/box") 
    public Response createbox(...) { 
    ... 
    } 
} 

Class2

@Path("/v2/ie") 
public class BagResource {   
    @POST 
    @Path("/bag") 
    public Response createbag(...) { 
     ... 
    }   
} 

Quando faccio una richiesta HTTP come /v2/ie/box, si genera l'errore di configurazione del server. Ma se cambio la mia Class2 come sotto, funziona bene.

@Path("/v2/ie/bag") 
public class BagResource {    
    @POST 
    public Response createbag(...) { 

    } 
} 

Perché è come .. La configurazione di @path a livello di classe e livello di metodo è diversa?

risposta

13

Una richiesta di /v2/ie/box viene mappato Class2 perché è ha

@Path("/v2/ie") 

come un'annotazione classe.

La più lunga Path vittorie in questo caso. Class1 non viene mai visto poiché ha l'annotazione della classe più breve @Path("/v2").

Dato che Class2 non ha alcun metodo che si associ al rimanente /box, si otterrà un 404 Not Found.

Raccomandazione

  1. Usa @Path annotazioni solo sui metodi: @Path("/v2/ie/bag") e @Path("/v2/ie/box")O
  2. uso una classe risorsa con una classe di annotazione di @Path("/v2/ie") e il metodo annotazioni di @Path("/bag") e @Path("/box").

Modifica

Vedi anche sezione "Richieste di corrispondenza per 3,7 Metodi di risorse" di the JAX-RS 2.0 spec.

+0

Dopo aver apportato le modifiche che ho fatto percorso livello di classe ("/ v2") entrambe le classi, anche allora mi sta gettando lo stesso errore –

+0

Si prega di leggere le specifiche che ho linkato nella mia risposta. E per favore aggiungi il tuo * codice * reale alla tua domanda. –

+0

Non capisco le specifiche ... E ci sono altri metodi nella mia classe di box il cui percorso è come/v2/ow/.. Quindi cannnot crea una risorsa .. Inoltre, scusa potresti aggiungere codice reale .. se hai bisogno di informazioni posso fornisci l'opzione 2 –

Problemi correlati