sto provando Content-type Akka-http e si spera che qualcuno può far luce su una delle seguenti domande:Akka-http: Accetta e movimentazione
Come si fa a creare percorsi diversi in base alla accettare : intestazione nella richiesta? Ad esempio, voglio un percorso di codice per gestire "json" e uno per gestire le richieste "xml" (con predefinito su "json" se manca l'intestazione)
Nei casi in cui non desidero che il contentType sia dedotto, come posso specificarlo? Ad esempio, nel codice qui sotto cerco di eseguire json tramite compactPrint() ma questo lo cambia in una stringa, quindi "text/plain". Voglio scavalcarlo e dire al cliente che è ancora json.
Il mio codice è qualcosa del genere;
...
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
}
}
}
}
...
La risposta in questo caso è text/plain, poiché compactPrint crea una stringa. critica molto gradita. ;)
Per utilizzare la funzione di negoziazione del contenuto automatico di akka-http è necessario fornire un marshaller per il proprio tipo di origine che possa eseguire il marshalling su diversi tipi di contenuto. Puoi usare 'Marshaller.oneOf' per comporre diversi marshaller in cui ogni marshaller sa come effettuare il marshalling di un solo tipo di contenuto. Hai visto la documentazione su Marshaller su http://doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala/http/common/marshalling.html#Custom_Marshallers? – jrudolph
Grazie. Ho finito per percorrere questa strada. –