Я пытаюсь определить действительно простой ресурс с помощью Liberator. Чтобы начать с минимального примера, я написал такой обработчик:
(resource
:handle-ok {:hello "world"})
Но, несмотря на четкую передачу значения (это не ноль), я получил следующее исключение:
java.lang.IllegalArgumentException
: в мультиметоде 'render-map-generic' нет метода для значения отправки: null.
И эта проблема присутствовала и в моем реальном ресурсе, поэтому я попытался объяснить, как она должна представлять карту, и включил: :available-media-types ["application/json"]
:
(resource
:available-media-types ["application/json"]
:handle-ok {:hello "world"})
Теперь это работает (удивило меня, что я должен был это сделать), но теперь, когда я указываю, что ресурс не существует, я получаю действительно странную ошибку response (не исключение). И продемонстрировать, что:
(resource
:available-media-types ["application/json"]
:exists? false
:handle-ok {:hello "world"})
Теперь я получаю 404 (что я ценю) со следующим телом ответа:
Произошла ошибка при разборе данных JSON
Неожиданный токен R в JSON в позиции 0
А вот и x-liberator-trace
:
: решение (: initialize-context {}); : решение (: услуга доступна? верно); : решение (: известный метод?: получить); : solution (: uri-too-long? false); : решение (: метод-разрешен?: получить); : решение (: неправильно сформировано? ложно); : решение (: разрешено? верно); : решение (: разрешено? верно); : solution (: valid-content-header? true); : решение (: известный-тип-контента? верно); : solution (: valid-entity-length? true); : решение (: is-options? false); : решение (: принять-существует? [false {: представление {: медиа-тип "application / json"}}]); : решение (: принять-язык-существует? ноль); : решение (: принять-кодировка-существует? ноль); : решение (: принять-кодирование-существует? ноль); : решение (: обрабатываемый? верно); : решение (: существует? ложь); : решение (: если-матч-звезда-существует-пропущено? ложь); : решение (: метод-положить? ложь); : решение (: существует? ложь); : решение (: после пропущенного? ложно); : handler (: handle-not-found)
И из этого вы можете предположить, что я мог бы просто взломать свой выход и определить обработчик :handle-not-found
, и я так и сделал, но этот ответ полностью игнорируется.
Я не уверен, что это ошибка или я просто не правильно использую Liberator. С таким простым примером, я предполагаю, что это последний. Но с другой стороны, когда я использую вместо этого «application / edn», он работает безупречно. Я также задавался вопросом, является ли это регрессией, поэтому я проверил пару версий назад, но те же результаты.