Akka http добавить заголовок к запросу POST с телом - PullRequest
0 голосов
/ 03 января 2019

У меня есть http-маршрут akka, который принимает json в теле запроса.Я пытаюсь протестировать этот маршрут с помощью набора тестов akka http.

val header = RawHeader("Content-Type", "application/json")
Post("/tasks", trigger.asJson.noSpaces) ~> addHeader(header) ~>
    addCredentials(OAuth2BearerToken(VALID_TOKEN)) ~> Route.seal(route) ~> check {
    status shouldBe StatusCodes.OK
  }

Этот тест не выполняется с сообщением

415 Unsupported Media Type was not equal to 200 OK 

Как правильно добавить заголовок типа содержимого в запрос

1 Ответ

0 голосов
/ 03 января 2019

Пусть akka-http создаст RequestEntity самостоятельно, вместо того, чтобы передавать json как String самостоятельно.

Вам просто нужно передать trigger в качестве второго параметра Post.apply как есть.

Post("/tasks", trigger) ~> addCredentials(OAuth2BearerToken(VALID_TOKEN)) ~> Route.seal(route) ~> check {
  status shouldBe StatusCodes.OK
}

Для этого потребуется ToEntityMarshaller[Trigger], доступный в вашем неявном контексте.

И вы можете добавить его точно так же, как в своем определении маршрута, импортировав / расширив de.heikoseeberger.akkahttpargonaut.ArgonautSupport и argonaut CodecJson[Trigger], если вы используете, например, argonaut.

В случае, если выхотите передать произвольное строковое значение, сделайте

Post("/tasks").withEntity(ContentTypes.`application/json`, someJsonAsString) ~> addCredentials(OAuth2BearerToken(VALID_TOKEN)) ~> Route.seal(route) ~> check {
   status shouldBe StatusCodes.OK
}
...