2013-04-06 11 views
5

voglio definire una risorsa in Compojure come questo:Compojure: parametro URL opzionale

(ANY "myres/:id" [id] (handler)) 

e voglio il: id ad essere facoltativa (a seconda se l'ID viene specificato il mio API si comporteranno in modo diverso).

Questo funziona bene se provo ad accedere

http://mydomain/myres/12 

Tuttavia, se provo ad accedere

http://mydomain/myres 

senza specificare un ID, ottengo 404.

C'è un modo per il parametro: id è facoltativo?

Grazie!

risposta

8

cosa circa la creazione di 2 percorso diverso uno con id e un altro senza di esso e chiamando il vostro gestore sia dal percorso come illustrato di seguito:

(defn handler 
    ([] "Response without id") 
    ([id] (str "Response with id - " id))) 

(defroutes my-routes 
    (ANY "myres" [] (handler)) 
    (ANY "myres/:id" [id] (handler id))) 
+0

Grazie per la vostra soluzione che io sicuramente applicare! È un vero peccato: il parametro id non è considerato opzionale per impostazione predefinita. Non mi piace l'idea di dover definire due percorsi, soprattutto se ho molte risorse che seguono lo stesso modello :( –