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
}