我有一个akka http路由,该路由在请求正文中接受json。我正在尝试使用Akka http测试工具来测试该路由。
<?php include_once("../../../config.php");
$sql= "SELECT * FROM cpg"; $result=mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
$rows[] = $row;
}
echo json_encode($rows); **}** ?>
此测试失败,并显示消息
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
}
如何正确地将内容类型标头添加到请求中?
答案 0 :(得分:0)
让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]
。
例如,如果您使用的是argonaut,则可以通过导入/扩展de.heikoseeberger.akkahttpargonaut.ArgonautSupport
和argonaut CodecJson[Trigger]
来以与路由定义相同的方式添加它。
如果要传递任意字符串值,请执行
Post("/tasks").withEntity(ContentTypes.`application/json`, someJsonAsString) ~> addCredentials(OAuth2BearerToken(VALID_TOKEN)) ~> Route.seal(route) ~> check {
status shouldBe StatusCodes.OK
}