2015-12-17 12 views
6

Sono nuovo ai servizi Restful. Stavo attraversando un codice e ho trovato questa lineaSignificato dei due punti (:) all'interno dell'annotazione @Path

@GET 

@Path("{image:image/.*}") 

Qualcuno può spiegare il significato e l'uso della sintassi di cui sopra?

+0

è solo una parte della regex utilizzata ... –

+0

@JunedAhsan Non è, almeno non il prefisso 'image:'. –

risposta

4

@Path la notazione supporta le stringhe normali per abbinare il percorso o una regex per abbinare un motivo. Nel tuo caso

@Path("{image:image/.*}") 

sembra essere solo che corrispondono a un modello di

Path param {image} con qualsiasi modello come immagine /.*, che si traduce in sostanza all'immagine/qualcosa, qualsiasi cosa qui non lo fa fare riferimento alla parola "qualsiasi cosa", ma il suo significato letterale vale a dire qualsiasi testo valido.

Correzione: Fare riferimento a @Sotirios Delimanolis risposta per i dettagli completi. Grazie amico per l'input di correzione.

3

La notazione è nota come modelli di percorso URI e descritta in documentation.

Si definisce una nuova variabile di modello dichiarandola tra parentesi {}. L'ambiente JX-RS associa il segmento di percorso corrispondente dall'URI richiesto a un parametro del metodo di gestione @PathParam dichiarato.

Dalla documentazione

modelli di percorso URI sono URI con variabili integrate all'interno della sintassi URI . Queste variabili vengono sostituite in fase di esecuzione in modo che una risorsa risponda a una richiesta basata sull'URI sostituito. Le variabili sono contrassegnate da parentesi graffe ({ e }). Ad esempio, guardare il seguente @Path annotazione:

@Path("https://stackoverflow.com/users/{username}") 

In questo tipo di esempio, un utente viene richiesto di digitare il proprio nome, e quindi un servizio Web JAX-RS configurato per rispondere alle richieste di questo modello di percorso URI risponde. Ad esempio, se l'utente digita il nome utente “Galileo”, il servizio Web risponde al seguente URL:

http://example.com/users/Galileo 

per ottenere il valore del nome utente, l'annotazione @PathParam può essere usato sulla metodo parametro di un metodo di richiesta, come mostrato nel seguente codice esempio:

@Path("https://stackoverflow.com/users/{username}") 
public class UserResource { 

    @GET 
    @Produces("text/xml") 
    public String getUser(@PathParam("username") String userName) { 
     ... 
    } 
} 

la documentazione passa poi a specificare la sintassi per la notazione

Per impostazione predefinita, la variabile URI deve corrispondere l'espressione regolare "[^ /] +?". Questa variabile può essere personalizzato specificando un diverso espressione regolare dopo il nome della variabile. Ad esempio, se un nome utente deve consistere solo di lettere minuscole e maiuscole alfanumerici caratteri, sostituire l'espressione regolare predefinito nella variabile definizione:.

@Path("users/{username: [a-zA-Z][a-zA-Z_0-9]}") 

In questo esempio la variabile nome utente selezionerà solo i nomi degli utenti che iniziano con una lettera maiuscola o minuscola e zero o più caratteri alfanumerici e il carattere di sottolineatura Se un nome utente d o non corrisponde a quel modello, una risposta 404 (non trovata) verrà inviata al client .

Così il vostro esempio

@Path("{image:image/.*}") 

definisce una variabile di modello URI chiamato image che contiene un segmento corrispondente al regex

image/.* 

L'ambiente JAX-RS sarà quindi utilizzare il metodo annotato per le richieste agli URI corrispondenti a

http://somehost.com/context-path/image/[anything] 

Presumibilmente, il metodo dovrebbe avere un parametro

@Path("{image:image/.*}") 
public Response handle(@PathParam("image") String path) { /* handling */ } 

e path avrebbe un valore "image/[anything]".

Problemi correlati