Play framework 2.5 не будет передавать запрос в ответ - PullRequest
0 голосов
/ 19 февраля 2020

Привет! У меня есть требование использовать Play Framework 2.5 (scala) для получения большого тела запроса, затем преобразовать его и затем передать обратно прямо.

До сих пор я не смог получить поток запросов для правильной отправки с использованием фрагментированного ответа (даже без преобразования).

Пример кода:

def endpointA = EssentialAction { requestHeader =>

  Accumulator.source.map { source: Source[ByteString, _] =>
    Ok.chunked(source)
  }
}

Отправка данных в конечную точку с помощью curl не выводит опубликованные данные как ожидается и просто приводит к ошибке ниже. Я подтвердил с помощью wireshark, что тело ответа не отправляется.

curl -v --data 'hello' -H "Connection: Keep-Alive" -H "Keep-Alive: 300" -H "Content-type: text/plain" http://localhost:9584/binding-tariff-admin/upload-csv
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 9584 (#0)
> POST /binding-tariff-admin/endpoint-a HTTP/1.1
> Host: localhost:9584
> User-Agent: curl/7.64.1
> Accept: */*
> Connection: Keep-Alive
> Keep-Alive: 300
> Content-type: text/plain
> Content-Length: 5
>
* upload completely sent off: 5 out of 5 bytes
< HTTP/1.1 200 OK
< Transfer-Encoding: chunked
< Cache-Control: no-cache,no-store,max-age=0
< Content-Security-Policy: default-src 'self' 'unsafe-inline' *.s3.amazonaws.com www.google-analytics.com data:
< X-Permitted-Cross-Domain-Policies: master-only
< Content-Type: application/octet-stream
< Date: Wed, 19 Feb 2020 10:15:36 GMT
<
* transfer closed with outstanding read data remaining
* Closing connection 0
curl: (18) transfer closed with outstanding read data remaining

Кроме того, если я изменяю код для возврата созданного мной потока, он работает нормально:

val testStream: Source[ByteString, NotUsed] = Source(List("hello")).map(ByteString.apply)

Есть ли что-то в корне не так с тем, что я пытаюсь сделать здесь? Я видел другие примеры переполнения стека, когда люди предполагали, что это возможно, например:

Play Framework Scala: Как транслировать тело запроса

Я также пытался использовать verbatimBodyParser метод описан в ссылке, но получил те же результаты.

Спасибо! NFV

...