Как вернуть JSON вместо Case Class в Акка-Http - PullRequest
0 голосов
/ 31 марта 2019

Я создал маршрут для потоковой передачи списка дел в JSON.Но если я использую ByteString, класс case печатается вместо JSON

def streamRoute: Route = pathEndOrSingleSlash {
        val byteString = new LocalFileParser(config).importFromFiles.map(phoneNumber => ByteString(phoneNumber.toString + "\n"))
        complete(HttpEntity(ContentTypes.`application/json`, byteString))
    }
   // RESULT: PhoneNumber(+35799000123,Some(357),Some(Cyprus),Some(Cytamobile-Vodafone),Some(MOBILE))

Если я просто использую complete(new LocalFileParser(config).importFromFiles), то это дает мне JSON.Хороший ли второй метод для потокового ответа?Если нет, как я могу исправить первый метод, возвращающий JSON вместо Case Class

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Учитывая, что вы уже используете Circe, вы можете упростить добавление этой библиотеки в свой проект:

"de.heikoseeberger" %% "akka-http-circe" % "<latest-version>"

и импортируем эти два класса, чтобы упорядочить ваш List[PhoneNumber] в HttpResponse, содержащий json:

import de.heikoseeberger.akkahttpcirce.ErrorAccumulatingCirceSupport._
import io.circe.generic.auto._

def streamRoute: Route = pathEndOrSingleSlash {
  complete(new LocalFileParser(config).importFromFiles)
}
0 голосов
/ 01 апреля 2019

С помощью метода Json.toJson(result) вы можете отправить свой результат в формате JSON,

В вашем случае что-то вроде этого: val byteString = new LocalFileParser(config).importFromFiles.map(phoneNumber => Ok(Json.toJson(phoneNumber)))

Надеюсь, это поможет

PS: Хорошо, возможно, HTTP-код, который вы хотите отправить туда

...