2015-03-06 4 views
1

Это Compojure GET маршрут с жестко заданным идентификатором ...compojure destructuring делает целые числа ... не целыми?

;posts 
(GET "/post:id" [id :as request] 
    ;(str "the post id is... " id) 
    (def email (get-in request [:session :ze-auth-email])) 
    (vb/post-page-draw email 17592186045616)) 

Работы^

Однако, с символическим идентификатором (на последней строке) ...

;posts 
(GET "/post:id" [id :as request] 
    ;(str "the post id is... " id) 
    (def email (get-in request [:session :ze-auth-email])) 
    (vb/post-page-draw email id) 

где url is:

localhost:4000/post17592186045616 ;;i.e. the number from above 

(изменить: нет двоеточия между словами post и id)

Возвращает huuuge трассировки стека, в основном нарушения на

java.lang.Exception 
processing rule: (q__7967 ?title ?content ?tags ?eid), 
message: processing clause: [?eid post/title ?title], 
message: Cannot resolve key: 17592186045616 

Итак, я был в состоянии изолировать его compojure просто не уничтожение того, любя число я передаю ... как я могу получить мой (vb/post-page-draw email id) для работы с параметрами, переданными через URL-адрес?

+2

'id' возвращается в виде строки, вам нужно, чтобы преобразовать его в ряд (с помощью' Long/parseString', например), и вы не должны гнездо 'def', используйте' пусть вместо этого. 'def' является глобальным, а не локальным. – cgrand

+0

cgrand ты гений. Благодарю вас любезно! – sova

ответ

2

Try:

(vb/post-page-draw email (Long. id)) 
+0

Прохладная идея ... но я возвращаю следующее: java.lang.NumberFormatException Для строки ввода: «17592186045617» – sova

+0

получил это. вы были на правильном пути наверняка. (Long/valueOf id) – sova

+1

Ох! Это был длинный! Может быть, это работает и короче 'Long.' – sbensu