yesod - получение тела запроса для POST «Content-type: application /json»

Используя yesod 0.8.0, я пытаюсь получить текст сообщения из этого примера запроса:

curl -v -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"name":"oscar"}'    http://localhost:3000/user/xyz

в моем обработчике я вижу только один способ использовать

(pp, files) <- runRequestBody

Но это не удается из-за типа контента. Есть ли другая функция для этого?

12 голосов | спросил Oscar 24 AMpSun, 24 Apr 2011 05:36:27 +040036Sunday 2011, 05:36:27

2 ответа


0

Вот как это сделать сейчас . В будущих выпусках я надеюсь добавить несколько удобных обёрток; вклад в это приветствуется.

Объяснение: каждая функция-обработчик находится в монаде GGHandler sub master (Iteratee ByteString IO). Это довольно сложно, но это означает, что это монадный преобразователь Handler вокруг Iteratee, который получает поток ByteStrings. Этот поток ByteStrings является необработанным телом запроса.

Итак, нам нужно использовать функцию потребления в перечислителе, чтобы взять весь поток ByteStrings и сохранить их в виде списка. И нам нужно использовать функцию lift, чтобы поднять это во внутреннюю монаду (Iteratee). Затем L.fromChunks преобразует из списка строгих ByteStrings в ленивый ByteString, который можно анализировать с любой произвольной библиотекой JSON (Yesod стандартизирует AESON).

Я предполагаю, что наиболее удобная функция, которую я мог бы предоставить, была бы parseRequestJson :: GGHandler s m (Iteratee ByteString IO) (Maybe Data.Aeson.Value). Я могу добавить, что в выпуске yesod-json.

ответил Michael Snoyman 24 AMpSun, 24 Apr 2011 07:52:24 +040052Sunday 2011, 07:52:24
0

В Yesod 1.0+ (а может и раньше, не уверен) работает следующее:

postRootR = do
    wr <- waiRequest
    bss <- lift $ lazyConsume $ requestBody wr
    let requestBody = L.fromChunks bss
ответил lincolnq 16 AMpMon, 16 Apr 2012 00:32:47 +040032Monday 2012, 00:32:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132