Akka http 使用 body 添加 header 到 POST 请求
Akka http add header to POST request with body
我有一个 akka http 路由,它在请求的 body 中接受 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
如何正确地将内容类型 header 添加到请求中?
让 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]
。
你可以像在路由定义中一样添加它 importing/extending 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
}
我有一个 akka http 路由,它在请求的 body 中接受 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
如何正确地将内容类型 header 添加到请求中?
让 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]
。
你可以像在路由定义中一样添加它 importing/extending 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
}