我正在尝试将application / json设置为spray-Type中的content-Type。但我在回复中看到的内容类型总是文本/简单。我尝试使用喷雾路由方法(“某些东西”)和喷雾罐接近(“something2”)但两条路线没有正确发送响应类型。我错过了什么吗?
def receive = runRoute {
path("something") {
get {
respondWithHeader(`Content-Type`(`application/json`)) {
complete("""{ "key": "value" }""")
}
}
} ~
path("something2") {
get {
complete(HttpResponse(entity = """{ "key": "value" }""").withHeaders((List(`Content-Type`(`application/json`)))))
}
}
}`enter code here`
答案 0 :(得分:1)
似乎响应头已被字符串编组覆盖。
像这样,它就像一个魅力:
path("something") {
get {
respondWithMediaType(`application/json`) {
complete("""{ "key": "value" }""")
}
}
}
答案 1 :(得分:1)
实际上,有一种更好的方法可以返回json
application/json
内容类型和spray.json
模块。如果你只有key:value
对,那么使用SprayJsonMarshaller会更加清晰,它会自动设置适当的标题。请考虑以下示例:
(get & path("somePath")) { complete(Map("key" -> "value")) }
要制作json响应,您只需要导入两件事:
import spray.json.DefaultJsonProtocol._ // contains default marshallers
import spray.httpx.SprayJsonSupport._ // will do all the headers work
如果您有自己的案例类,希望通过网络发送,请将转换器提供为json格式:
import spray.json.DefaultJsonProtocol._
case class SomeClass(name: String)
object SomeClass {
implicit val someClassJson = jsonFormat1(SomeClass.apply)
}
这是一个更好的方法,因为如果您以后想要更改响应中的格式,您需要做的就是更改编组,重写您的代码。
jsonFormat方法末尾的数字等于case类参数的数量。