Ich möchte das Akka Http-Routing-System zusammen mit seinem Ablehnungssystem verwenden, muss aber die Antwort Json für eine Ablehnung in einem generischen Json-Nachrichtenblock verschachteln.Wie generiere ich eine Abweisung generisch mit Akka-Http
Ich habe dies funktioniert in einer sehr nicht-generischen Art und Weise erstellen eine AblehnungHandler dann Fällen für alle möglichen Ablehnungen hinzufügen und sie alle mit dem spezifischen Antwortcode und Nachricht behandeln.
Beispiel:
// Wraps string into control block format
def WrappingBlock(msg: String) = ???
val myRejectionHandler = RejectionHandler
.newBuilder()
.handle{case MalformedRequestContentRejection(msg, detail) =>
complete(BadRequest, WrappingBlock(msg)) }
... // Further lines for all other possible rejections
... // along with their response codes and messages.
... // It would be nice if this was just generic code
... // rather than specific to every rejection type.
.result()
val routes = handleRejections(myRejectionHandler){
...
}
Aber was ich möchte, ist der Antwortcode, der Akka HTTP standardmäßig bereitstellt und auch die hübsche Drucknachricht, die bereitgestellt wird, verschachtelt nur innerhalb einer Json Steuer Wrapper ohne Linie für jeder mögliche Ablehnungstyp. Das scheint so zu sein, als ob es möglich wäre, aber ich konnte es nicht abschließen.
Das ist sehr interessant, ich hatte nicht gedacht, eine Kombination mit Kartenantwort zu verwenden, ich werde diese Option betrachten. – AlexC
Ist es möglich, als benutzerdefinierten RejectionHandler zu schreiben? Ich könnte nicht mit einer solchen Lösung kommen, weil es beim Verlassen "Route" erfordert, wo wir in Ihrem Fall "Richtlinie" haben. – expert
@ruslan, ich bin mir nicht sicher, was genau du fragst. Sie können sicherlich einen benutzerdefinierten Ablehnungs-Handler erstellen, wie hier beschrieben: http://doc.akka.io/docs/akka-stream-und-http-experimental/2.0.2/scala/http/routing-dsl/rejections.html# Customizing_Rejection_Handling. Nicht sicher, warum Sie auf der "Route" gegen "Direktive" beim Verlassen meinen. Vielleicht erstellen Sie auf dieser Grundlage eine neue Frage, die Ihre Situation besser beschreibt. – cmbaxter