liberator

时间:2018-09-14 10:30:37

标签: clojure liberator

我正在尝试使用Liberator定义一个非常简单的资源。首先,我写了一个这样的处理程序:

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

但是尽管明确传递了一个值(不是nil),但我还是遇到了以下异常:

  

java.lang.IllegalArgumentException:在多方法“ render-map-generic”中没有用于调度值的方法:空。

这个问题也已经出现在我的实际资源中,因此我试图明确说明它应如何表示地图,并包括::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数据时出错

     

JSON在位置0处的意外令牌R

这是x-liberator-trace

  

:decision(:initialize-context {}); :decision(:service-available?true); :decision(:known-method?:get); :decision(:uri-too-long?false); :decision(:method-allowed?:get); :decision(:formal ?? false); :decision(:authorized?true); :decision(:allowed?true); :decision(:valid-content-header?true); :decision(:known-content-type?true); :decision(:valid-entity-length?true); :decision(:is-options?false); :decision(:accept-exists?[false {:representation {:media-type“ application / json”}}]));; :decision(:accept-language-exists?nil); :decision(:accept-charset-exists?nil); :decision(:accept-encoding-exists?nil); :decision(:processable?true); :decision(:exists?false); :decision(:if-match-star-exists-for-missing?false); :decision(:method-put?false); :decision(:existed?false); :decision(:post-to-missing?false); :handler(:handle-not-found)

您可能会建议我可以破解我的出路并定义一个:handle-not-found处理程序,但我已经知道了,但是此响应完全覆盖了它。

我不确定这是一个错误还是我没有正确使用Liberator。由于示例非常简单,我认为是后者。但另一方面,当我改用“ application / edn”时,它就可以完美地工作了。我也想知道这是否是回归,所以我检查了几个版本,但结果相同。

0 个答案:

没有答案