Как изменить Akka HttpResponse?

#scala #akka #akka-http

#scala #akka #akka-http

Вопрос:

Я использую Akka и хочу изменить сущность a HttpResponse . В частности, я хочу изменить body или header конкретного HttpResponse . Поскольку HttpResponse это конечный класс, я не могу его изменить, но достаточно скопировать и установить слегка измененный body .

Вот мой код:

 val handler = Source.single(context.request)
        .via(flow)
        .runWith(Sink.head)
        .flatMap { r =>
          logger.info(s"Status code: ${r.status}.")
          val copyR = r.copy(status = r.status, headers = r.headers, entity = ???, protocol = r.protocol)
          context.complete(copyR)
        }
  

Есть ли элегантный способ проанализировать entity и изменить определенные элементы DOM?

Комментарии:

1. Что вы подразумеваете под DOM? HttpResponse это просто поток байтов.

2. Например, я хотел бы добавить или удалить ссылки HttpResponse .

3. Длинная история, но, короче говоря, вам нужно отменить ответ на что-то, что понимает HTML / XML, изменить его, а затем маршалировать обратно в двоичный файл. Взгляните на doc.akka.io/docs/akka/2.4.11/scala/http/common/marshalling.html Для синтаксического анализа HTML я рекомендую JSoup. Akka-Http не предоставляет функциональности для анализа HTML.

4. Круто! Спасибо за вашу помощь!