4

我正在尝试使用 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"})

现在它可以工作了(令我惊讶的是我必须这样做),但现在每当我指出资源不存在时,我都会得到一个非常奇怪的错误响应(不是例外)。并证明:

(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 (:malformed?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); :

你可能会建议我可以破解我的出路并定义一个:handle-not-found处理程序,我有,但它只是被这个响应完全覆盖。

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

4

0 回答 0