Возврат заголовка местоположения в ответе 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}}))
Другие вопросы по тегам