Возврат заголовка местоположения в ответе 201 Created в Liberator
Я пытаюсь реализовать ресурс коллекции с Liberator, где POST
запрос к URL коллекции (например, /posts
) создаст новую запись в блоге. Это работает нормально. То, что не работает, отвечает на POST
запрос с 201 Created
ответ, включая Location
заголовок, указывающий на новый URL (например, /posts/1
).
Я могу либо ответить с 201 Created
, но тогда я не могу включить Location
ответ заголовка, и, следовательно, клиент не будет знать, что новый URL, или в качестве альтернативы я могу установить :post-redirect? true
и вернуть 303 See Other
ответ с Location
заголовок.
Есть ли способ вернуть 201 Created
и Location
заголовок из обработчика POST Liberator?
1 ответ
Решение
Каждый обработчик может вернуть полный ответ на звонок, включая заголовки, используя кольцевой ответ:
(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}}))