Chciałbym użyć systemu routingu Akka Http, wraz z jego systemem odrzucania, ale trzeba zagnieździć Json odpowiedzi dla odrzucenia w ramach ogólnego bloku wiadomości Json.Jak ogólnie owinąć odrzucenie za pomocą Akka-Http
Mam to działa w bardzo nietypowy sposób, tworząc RejectionHandler, a następnie dodając przypadki dla wszystkich możliwych odrzuceń i obsługując je wszystkie za pomocą specjalnego kodu odpowiedzi i komunikatu.
przykład:
// 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){
...
}
Jednak to, co chciałbym jest kod odpowiedzi, że Akka HTTP udostępnia domyślnie, a także całkiem wiadomość druku, który jest dostarczany tylko zagnieżdżony w opakowaniu jednostkowym sterowania Json bez linii do każdy możliwy rodzaj odrzucenia. Wygląda na to, że powinno być możliwe, ale nie byłem w stanie go ukończyć.
To jest bardzo interesujące, nie myślałem o użyciu kombinacji z odpowiedzią na mapę, przyjrzę się tej opcji. – AlexC
Czy można napisać jako niestandardowy RejectionHandler? Nie mogłem znaleźć takiego rozwiązania, ponieważ wymaga 'Route' przy wyjściu, gdzie jak w twoim przypadku mamy' dyrektywę'. – expert
@ruslan, nie jestem pewien, o co pytasz. Z pewnością można utworzyć niestandardową procedurę obsługi odrzucania, jak opisano tutaj: http://doc.akka.io/docs/akka-stream-and-http-experimental/2.0.2/scala/http/routing-dsl/rejections.html# Customizing_Rejection_Handling. Nie wiesz, dlaczego masz na myśli "trasę" kontra "dyrektywę" przy wyjściu. Być może utwórz na tej podstawie nowe pytanie, które lepiej opisuje twoją sytuację. – cmbaxter