【发布时间】:2018-07-17 10:53:46
【问题描述】:
我对 akka-http 有疑问。Content-Type 标头默认值为text/plain。我正在尝试像这样设置application/json 值:
val routes =
respondWithHeader(headers.`Content-Type`(ContentType(MediaTypes.`application/json`))) {
// ...
// all api routes
// ...
}
但这不起作用。 Content-Type 仍然是 text/plain。
UPD
我不阅读客户Content-Type 标头。我正在尝试从服务器的默认 Content-Type 标头发送另一个。
UPD2
例如:
import JsonProtocol.entityFormat
//...
(get & path("api" / "entities")) {
complete(getAllEntities)
}
getAllEntities 将来自DB 的实体列表返回为Future[Entity]。
Entity 只是一个模型:
case class Entity(foo: Int, bar: String)
EntityFormat 看起来像:
object JsonProtocol extends spray.json.DefaultJsonProtocol {
implicit val entityFormat = jsonFormat2(Entity)
}
最后将 Future 转换为 ResponseMarshallable:
implicit def entity2ResponseMarshallable(entityF: Future[Entity]): ToResponseMarshallable =
entityF map (_.toJson.toString())
【问题讨论】:
-
你可以试试这个:respondWithHeader(RawHeader("Content-Type", "application/json"))
-
@tea-addict 同样的结果
-
@Astrid 我不这么认为。我有吨路线和吨吨
complete方法。我不想修改它们中的每一个。我想设置一次标题。 -
如果您要返回 JSON 对象,最好查看其中一种方法的示例 - 通常 akka-http 会自动检测内容类型并将其设置为 application/json。 Content-Type 通常会得到特殊处理,并且看起来不能设置为标题 - 请参阅 doc.akka.io/docs/akka-http/current/common/…