2016-03-01 32 views
7

Ho bisogno di implementare un'API con questi parametri di percorso.Come creare API REST con parametri facoltativi?

@Path("/job/{param1}/{optional1}/{optional2}/{param2}") 

Il secondo e il terzo parametro possono essere opzionali? Quindi il cliente non ha bisogno di passare questi, ma deve passare il primo e l'ultimo.

Se ciò non è possibile, è consigliabile riorganizzare i parametri in questo modo?

@Path("/job/{param1}/{param2}/{optional1}/{optional2}") 

Come fornire i parametri facoltativi?

+0

è meglio riorganizzare i parametri, se avessi una scelta, avrei separato obbligatorio e facoltativo in 2 sezioni, separate da un delimitatore nell'URL, quindi reso obbligatorio come posizionale, e facoltativo come coppia di valori chiave, non lo faccio so come, quale cliente, in quale scenario stai scrivendo il codice, cosa hai provato fino ad ora? – abasu

+0

@abasu Sto usando JAX-RS. Ho fatto riferimento a http://www.nakov.com/blog/2009/07/15/jax-rs-path-pathparam-and-optional-parameters/. È obbligatorio usare regex o esiste un altro modo? – mbgsuirp

+0

Come distinguere 'optional1' e' optional2' in '/ job/foo/bar/baz'? Cos'è 'bar'? –

risposta

3

è possibile abbinare l'intero percorso che termina con la richiesta REST

@Path("/location/{locationId}{path:.*}") 
public Response getLocation(
    @PathParam("locationId") int locationId, 
    @PathParam("path") String path) { 
    //your code 
} 

Ora la variabile del percorso contiene tutto il percorso dopo location/{locationId}

È anche possibile utilizzare espressioni regolari per fare il percorso opzionale.

@Path("/user/{id}{format:(/format/[^/]+?)?}{encoding:(/encoding/[^/]+?)?}") 
public Response getUser(
    @PathParam("id") int id, 
    @PathParam("format") String format, 
    @PathParam("encoding") String encoding) { 
    //your code 
} 

Ora se il formato e la codifica saranno facoltativi. Tu non dai alcun valore che saranno vuoti.

+2

Mente che menziona la fonte? http://www.nakov.com/blog/2009/07/15/jax-rs-path-pathparam-and-optional-parameters/ –

1

riordinare le params e provare quanto segue:

@Path("/job/{param1}/{param2}{optional1 : (/optional1)?}{optional2 : (/optional2)?}") 
public Response myMethod(@PathParam("param1") String param1, 
         @PathParam("param2") String param2, 
         @PathParam("optional1") String optional1, 
         @PathParam("optional2") String optional2) { 
    ... 
} 
7

Potrebbe essere più facile di trasformare i parametri percorso opzionale in parametri di query. È quindi possibile utilizzare @DefaultValue in caso di necessità:

@GET @Path("/job/{param1}/{param2}") 
public Response method(@PathParam("param1") String param1, 
    @PathParam("param2") String param2, 
    @QueryParam("optional1") String optional1, 
    @QueryParam("optional2") @DefaultValue("default") String optional2) { 
    ... 
} 

È quindi possibile chiamare utilizzando /job/one/two?optional1=test passando solo i parametri facoltativi necessari.