Как обработать отправку базовой формы c с помощью http4s? - PullRequest
0 голосов
/ 25 января 2020

Не могу поверить, что этого нет в документации http4s , а пример кода, который мне удалось выкопать в Интернете (после того, как я достаточно долго изучал класс UrlForm), не соответствует работает для меня.

Соответствующий бит кода выглядит следующим образом:

case req @ POST -> Root / "compose" =>
  req.decode[UrlForm] { ps =>
    println("ps.values: " + ps.values)
    val content = ps.getFirstOrElse("content",
      throw new IllegalStateException("No content given!"))
    // Do something with `content`...
  }

При отправке связанной формы, IllegalStateException выбрасывается. ps.values - это пустая карта (Map()).

Я вижу (используя println), что Content-Type равно application/x-www-form-urlencoded, как и ожидалось, и я вижу на вкладке Сеть моего браузера этот запрос "paramaters" (значения закодированной формы) отправляется правильно.

1 Ответ

0 голосов
/ 18 февраля 2020

Проблема в том, что у меня был фильтр (javax.servlet.Filter), который вызывал getParameterMap на HttpServletRequest. Это истощало InputStream для запроса, и это происходило до того, как запрос был передан экземпляру сервлета (BlockingHttp4sServlet).

Мне кажется, BlockingHttp4sServlet должен поднять IllegalStateException (или что-то более описательное), когда он получает InputStream с isFinished, возвращающим true. (Я подал проблему с проектом http4s на Github.)

...