我正在尝试使用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
标头?
答案 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}}))