Scala akka http:如何设置响应头
我的路线如下:Scala akka http:如何设置响应头,scala,routes,akka,spray,akka-http,Scala,Routes,Akka,Spray,Akka Http,我的路线如下: val route = { logRequestResult("user-service") { pathPrefix("user") { get { respondWithHeader(RawHeader("Content-Type", "application/json")) { parameters("firstName".?, "lastName".?).as(Name) { name =&g
val route = {
logRequestResult("user-service") {
pathPrefix("user") {
get {
respondWithHeader(RawHeader("Content-Type", "application/json")) {
parameters("firstName".?, "lastName".?).as(Name) { name =>
findUserByName(name) match {
case Left(users) => complete(users)
case Right(error) => complete(error)
}
}
}
} ~
(put & entity(as[User])) { user =>
complete(Created -> s"Hello ${user.firstName} ${user.lastName}")
} ~
(post & entity(as[User])) { user =>
complete(s"Hello ${user.firstName} ${user.lastName}")
} ~
(delete & path(Segment)) { userId =>
complete(s"Hello $userId")
}
}
}
}
我的响应的内容类型应该始终是application/json
,正如我为get
请求设置的那样。然而,我在测试中得到的是text/plain
。如何在响应中正确设置内容类型
另一方面,akka http文档是我见过的最没有价值的垃圾之一。几乎所有到示例代码的链接都被破坏了,他们的解释仅仅说明了显而易见的问题。Javadoc没有代码示例,我在Github上找不到他们的代码库,所以从他们的单元测试中学习也是不可能的。我发现了一篇帖子,上面写着“在spray/akka http中,一些头被特别处理过”。显然,内容类型就是其中之一,因此不能像上面的代码那样设置。必须创建一个具有所需内容类型和响应主体的HttpEntity
。有了这些知识,当我按如下方式更改get
指令时,它起了作用
import akka.http.scaladsl.model.HttpEntity
import akka.http.scaladsl.model.MediaTypes.`application/json`
get {
parameters("firstName".?, "lastName".?).as(Name) { name =>
findUserByName(name) match {
case Left(users) => complete(users)
case Right(error) => complete(error._1, HttpEntity(`application/json`, error._2))
}
}
}
我同意你对文件状态的看法。我要说的是,作为一个社区项目,个人可以主动帮助改进自己。@acjay个人只有在掌握了代码后才能做出贡献,而现有的、糟糕的文档严重阻碍了这一点。是的,人们可以随时查看源代码,但是,同样,这对初学者来说不是很费时,对于大多数问题来说也不必要。如果他们总是想让人们研究源代码,他们就不应该假装有任何文档。