我正在尝试使用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”时,它就可以完美地工作了。我也想知道这是否是回归,所以我检查了几个版本,但结果相同。