Проблема представления JSON с освободителем

Я пытаюсь определить действительно простой ресурс с помощью Liberator. Чтобы начать с минимального примера, я написал такой обработчик:

(resource
  :handle-ok {:hello "world"})

Но, несмотря на четкую передачу значения (это не ноль), я получил следующее исключение:

java.lang.IllegalArgumentException: Нет метода в multimethod 'render-map-generic' для значения отправки: null.

И эта проблема присутствовала и в моем реальном ресурсе, поэтому я попытался четко указать, как она должна представлять карту, и я добавил: :available-media-types ["application/json"]:

(resource
  :available-media-types ["application/json"]
  :handle-ok {:hello "world"})

Теперь это работает (удивило меня, я должен был это сделать), но теперь, когда я указываю, что ресурс не существует, я получаю действительно странный ответ об ошибке (не исключение). И продемонстрировать, что:

(resource
  :available-media-types ["application/json"]
  :exists? false
  :handle-ok {:hello "world"})

Теперь я получаю 404 (что я ценю) со следующим телом ответа:

Произошла ошибка при разборе данных JSON

Неожиданный токен R в JSON в позиции 0

И вот x-liberator-trace:

: решение (: инициализировать-контекст {});: решение (: услуга доступна? верно);: решение (: известный метод?: получить);: 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", это работает безупречно. Я также задавался вопросом, является ли это регрессией, поэтому я проверил пару версий назад, но те же результаты.

0 ответов

Другие вопросы по тегам