Akka http добавить заголовок к запросу POST с телом

У меня есть akka http route, который принимает 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 ответ

Решение

Пусть акка-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 и аргонавт CodecJson[Trigger] если вы используете аргонавт, например.

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

Post("/tasks").withEntity(ContentTypes.`application/json`, someJsonAsString) ~> addCredentials(OAuth2BearerToken(VALID_TOKEN)) ~> Route.seal(route) ~> check {
   status shouldBe StatusCodes.OK
}
Другие вопросы по тегам