Я пытаюсь из Content-типа Акка-клиента и, надеюсь, кто-то может пролить свет на следующие вопросы:Акка-клиента: Принять и обработка
Как создать различные маршруты, основанные на акцепт : заголовок в запросе? Например, я хочу, чтобы один кодовый путь обрабатывал «json» и один обрабатывал запросы «xml» (по умолчанию «json», если отсутствует заголовок)
В тех случаях, когда я не хочу, чтобы contentType был Как это определить? Например, в приведенном ниже коде я пытаюсь запустить json через compactPrint(), но это меняет его на строку, следовательно, «text/plain». Я хочу переопределить это и сказать клиенту, что это все еще json.
Мой код - это примерно так;
...
path("api") {
get {
complete {
getStuff.map[ToResponseMarshallable] {
case Right(r) if r.isEmpty => List[String]().toJson.compactPrint
case Right(r) => r.toJson.compactPrint
case Left(e) => BadRequest -> e
}
}
}
}
...
Ответ в этом случае является текстовым/открытым, поскольку compactPrint создает строку. критика очень приветствуется. ;)
Чтобы использовать функцию согласования контента в режиме akka-http, вам необходимо предоставить маршаллер для вашего типа источника, который может объединять несколько типов контента. Вы можете использовать 'Marshaller.oneOf' для создания разных маршаллов, где каждый маршаллер знает, как маршалировать только один тип контента. Вы видели документацию о маршаллере по адресу http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala/http/common/marshalling.html#Custom_Marshallers? – jrudolph
Спасибо. Я в конечном итоге пошел по этому маршруту. –