在Liberator中的201 Created响应中返回Location标头

时间:2012-12-22 23:12:33

标签: clojure liberator

我正在尝试使用Liberator实现一个集合资源,其中对集合URL的POST请求(例如/posts)将创建一个新的博客帖子项。这工作正常。无效的方法是使用POST响应回复201 Created请求,其中包含指向新网址的Location标头(例如/posts/1)。

我可以使用201 Created回复,但之后我无法包含Location标头响应,因此客户端将无法知道新网址是什么,或者我是可以设置:post-redirect? true,并返回带有303 See Other标题的Location回复。

有没有办法从Liberator POST处理程序返回201 Created Location标头?

1 个答案:

答案 0 :(得分:3)

每个处理程序都可以通过使用响铃来返回包括标题的完整响铃响应:

(defresource baz
  :method-allowed? true
  :new? true
  :exists? true
  :post! (fn [ctx] {::location "http://example.com"})
  :post-redirect? false 
  :handle-created (fn [{l ::location }] 
                    (ring-response {:headers {"Location" l}}))