gpt4 book ai didi

scala - Akka-http:接受和内容类型处理

转载 作者:行者123 更新时间:2023-12-03 23:47:39 26 4
gpt4 key购买 nike

我正在尝试 Akka-http,希望有人能阐明以下问题:

  • 如何根据请求中的 accept: header 创建不同的路由?例如,我想要一个代码路径来处理“json”和一个来处理“xml”请求(如果缺少 header ,则默认为“json”)
  • 如果我不希望推断 contentType,我该如何指定它?例如,在下面的代码中,我尝试通过 compactPrint() 运行 json,但这会将其更改为字符串,因此是“text/plain”。我想覆盖它并告诉客户端它仍然是 json。

  • 我的代码是这样的;
    ...
    path("api") {
    get {
    complete {
    getStuff.map[ToResponseMarshallable] {
    case Right(r) if r.isEmpty => List[String]().toJson.compactPrint
    case Right(r) => r.toJson.compactPrint
    case Left(e) => BadRequest -> e
    }
    }
    }
    }
    ...

    这种情况下的响应是 text/plain,因为 compactPrint 创建了一个字符串。
    非常欢迎批评。 ;)

    最佳答案

    您可以按如下方式定义内容类型,

    complete {
    HttpResponse(entity = HttpEntity(ContentType(MediaTypes.`application/json`), """{"id":"1"}"""))
    }

    您可以创建您的自定义指令,
      def handleReq(json: String) = {
    (get & extract(_.request.acceptedMediaRanges)) {
    r =>
    val encoding: MediaRange =
    r.intersect(myEncodings).headOption
    .getOrElse(MediaTypes.`application/json`)
    complete {
    // check conditions here
    // HttpResponse(entity = HttpEntity(encoding.specimen, json)) //
    }
    }
    }

    并在路由中使用指令作为
    val route = path("api"){ handleReq(json) }

    关于scala - Akka-http:接受和内容类型处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32187858/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com