Scala Akka HTTP后路由JSON反序列化

Scala Akka HTTP后路由JSON反序列化,scala,json-deserialization,akka-http,spray-json,Scala,Json Deserialization,Akka Http,Spray Json,我是Scala-Akka httpd的新手,我正在尝试创建一个post路由,它可以接受JSON数据进行序列化并返回另一个JSON响应。到目前为止,我创建了下面的代码,但代码有一些错误,我无法解决它 我还将项目上传到github: 我的要求是: {"id":"XN2zZQABxJsKK0jU4QnIzw","imp":[{"id":"1","banner":{"w":300,"h":250,"pos":3,"format":[{"w":300,"h":250}]},"displaymanager"

我是Scala-Akka httpd的新手,我正在尝试创建一个post路由,它可以接受JSON数据进行序列化并返回另一个JSON响应。到目前为止,我创建了下面的代码,但代码有一些错误,我无法解决它

我还将项目上传到github:

我的要求是:

{"id":"XN2zZQABxJsKK0jU4QnIzw","imp":[{"id":"1","banner":{"w":300,"h":250,"pos":3,"format":[{"w":300,"h":250}]},"displaymanager":"GOOGLE","tagid":"4254117042","bidfloor":0.19,"bidfloorcur":"USD","secure":1,"metric":[{"type":"click_through_rate","value":0,"vendor":"EXCHANGE"},{"type":"viewability","value":0.80000000000000004,"vendor":"EXCHANGE"},{"type":"session_depth","value":13,"vendor":"EXCHANGE"}],"ext":{"billing_id":["71151605235"],"publisher_settings_list_id":["18260683268513888323","2151365641960790044"],"allowed_vendor_type":[79,138,144,237,238,331,342,414,445,474,485,489,523,550,566,698,704,743,745,767,776,780,785,797,828,4374,4513,4648,4651,4680,4697],"ampad":3}}],"site":{"page":"http://jobs.bdjobs.com/jobsearch.asp","publisher":{"id":"pub-5130888087776673","ext":{"country":"BD"}},"content":{"contentrating":"DV-G","language":"en"},"ext":{"amp":0}},"device":{"ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0","ip":"103.219.170.0","geo":{"lat":23.818607330322266,"lon":90.433006286621094,"country":"BGD","utcoffset":360},"os":"Windows","devicetype":2,"pxratio":1},"user":{"id":"CAESEGTB3gVLV019BLOZ9saadwo","data":[{"id":"DetectedVerticals","name":"DoubleClick","segment":[{"id":"5076","value":"0.8"},{"id":"960","value":"1"},{"id":"61","value":"0"},{"id":"330","value":"0.1"},{"id":"959","value":"0.1"}]}]},"at":2,"tmax":122,"cur":["USD"],"ext":{"google_query_id":"ANy-zJH36AVK9h5uCf4Z0xfyWjrBZU6M7mxGfgQE9A_qw_HahXk9khANxU7o1KDEIsfldK0DAw"}}
如何处理输入JSON并发送响应

更新 我用case类更新了路由到point,但在控制台中出错

val httpServerRoute =
     post {
       path("bid-request")
       entity(implicitly[FromRequestUnmarshaller[requestData]]) { request =>
         complete((dataBiddermap ? getBidderData(request)).map(
           _ => StatusCodes.OK
         ))
       }
     }
错误消息:

Error:(95, 25) could not find implicit value for parameter e: akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller[bidder.requestData]
   entity(implicitly[FromRequestUnmarshaller[requestData]]) { request =>
Error:(95, 25) not enough arguments for method implicitly: (implicit e: akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller[bidder.requestData])akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller[bidder.requestData].Unspecified value parameter e.
   entity(implicitly[FromRequestUnmarshaller[requestData]]) { request =>

我在服务器中使用此模式进行
post
请求,希望这有助于:

post {
  decodeRequest {
    entity(as[BidRequest]) { bidRequest =>
      val response: BidResponse = process(bidRequest)

      complete(response)
    }
  }
}

请求和响应类型的封送拆收器在范围内。

这里有很多代码,您能将其缩减为一个吗?您需要一个
post
指令,也许最好先尝试一个简单的
get
端点。还有,错误是什么?它是否不编译,或者它是否编译,但在运行它时,它的行为是否不符合预期?如何运行它,您期望得到什么结果,以及您得到了什么结果?我在compact版本中更新了我的代码,我不知道将请求JSON数据从route指令传递到case类并返回JSON响应的正确过程。我编译了代码,但有错误,因为路由部分不完整。我只需要发布JSON数据并以JSON格式返回
case-class-BidResponse
。请指导我怎么做。我遵循了一些文档,但它会造成更多的混乱。我知道这是一项简单的任务,因为它是关于将JSON发布到POST指令,并以JSON格式返回特定数据,可能会以JSON格式打印ID,并以JSON格式从POST JSON打印横幅w,h。但我是新的,所以我犯了愚蠢的错误,请考虑一下。也许我的代码结构不正确,所以你能告诉我如何处理我的参考JSON数据吗谢谢你的帮助,我在将case类对象值返回到JSON时遇到了另一个错误,
no implicits find for parameter writer jsonwriter
如何转换为JSON response
val responseData=BidResponse(uuid),“XN2ZZQABXJSKKK0JU4QNIZW”,campaignData.bid,选项(“4548”),选项(simpleBanner1))
您的案例类需要一个合适的JSON封送处理程序。详细信息将取决于您使用的JSON库,因此请查看Akka Http文档。如果您仍然有问题,最好单独提问,而不是在这里尝试处理。
post {
  decodeRequest {
    entity(as[BidRequest]) { bidRequest =>
      val response: BidResponse = process(bidRequest)

      complete(response)
    }
  }
}