как ограничить объем отклонений akka http своими маршрутами - PullRequest
1 голос
/ 27 марта 2020

вот моя структура маршрута

classA {

implicit def classARejectionHandler =
    RejectionHandler.newBuilder()
      .handle {
        case MissingCookieRejection(cookieName) =>
          complete(HttpResponse(BadRequest, entity = "No cookies, no service!!!"))
      }
      .handle {
        case AuthorizationFailedRejection =>
          complete((Forbidden, "You're out of your depth!"))
      }
      .handle {
        case ValidationRejection(msg, _) =>
          complete((InternalServerError, "That wasn't valid! " + msg))
      }
      .handleAll[MethodRejection] { methodRejections =>
        val names = methodRejections.map(_.supported.name)
        complete((MethodNotAllowed, s"Can't do that! Supported: ${names mkString " or "}!"))
      }
      .handleNotFound { complete((NotFound, "Not here!")) }
      .result()

val route:Route = handleRejections(classARejectionHandler) {
concat(
        path("event-by-id") {
          get {
      }
} ,
  path("create-event") {
          post {
      }
}
}

classB {

implicit def classBRejectionHandler =
    RejectionHandler.newBuilder()
      .handle {
        case MissingCookieRejection(cookieName) =>
          complete(HttpResponse(BadRequest, entity = "No cookies, no service!!!"))
      }
      .handle {
        case AuthorizationFailedRejection =>
          complete((Forbidden, "You're out of your depth!"))
      }
      .handle {
        case ValidationRejection(msg, _) =>
          complete((InternalServerError, "That wasn't valid! " + msg))
      }
      .handleAll[MethodRejection] { methodRejections =>
        val names = methodRejections.map(_.supported.name)
        complete((MethodNotAllowed, s"Can't do that! Supported: ${names mkString " or "}!"))
      }
      .handleNotFound { complete((NotFound, "Not here!")) }
      .result()

val route:Route = handleRejections(classBRejectionHandler) {
      path("fileUploads") {
        post {
    }
}
}
}

class Demo extends App {

def main {
val a =new classA
val b = new ClassB

val routes = a~b
      val bindingFuture = Http().bindAndHandle(MainRouter.routes, hostName, port)

}


}

теперь проблема в том, что когда я вхожу в маршрут localhost:8080/fileuploads методом POST с его параметрами, маршрут работает, когда

  • я удаляю отклонения из classA

  • это работает, когда я удаляю отклонения как из classA, так и classB

маршрут не работает, когда

  • код отклонения присутствует в классах classA и classB

  • только в classA

не работает, я имею в виду, я получаю ответ

Not here!

, то есть обработчик отклонения classA handleNotFound отклоняет маршрут classsB потому что я иду по маршруту classB Согласно моему пониманию, существует некоторая проблема в цепочке маршрутов, но мне нужно поместить разные маршруты в разные классы, это мое требование, как я могу прекратить получать отклонение желаемого маршрута от других цепочек обработчики отклонения маршрутов?

...