compojure деструктурирует, делая целые числа не целыми числами?

Этот маршрут Compojure GET с жестко заданным идентификатором...

   ;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:

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

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

Возвращает огромную трассировку стека, в основном

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

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


person sova    schedule 06.03.2015    source источник
comment
id возвращается в виде строки, которую вам нужно преобразовать в число (например, используя Long/parseString), и вы не должны вкладывать def, вместо этого используйте let. def является глобальным, а не локальным.   -  person cgrand    schedule 06.03.2015
comment
cgrand ты гений. спасибо любезно!   -  person sova    schedule 06.03.2015


Ответы (1)


Пытаться:

(vb/post-page-draw email (Long. id))
person sbensu    schedule 06.03.2015
comment
Классная идея... но я получаю следующее: java.lang.NumberFormatException Для входной строки: 17592186045617 - person sova; 06.03.2015
comment
понятно. вы были на правильном пути наверняка. решил это с помощью (Long/valueOf id) - person sova; 06.03.2015
comment
Ох! Это был лонг! Может быть, это работает и короче Long. - person sbensu; 06.03.2015