Apache kafka 从Spray POST中提取Json作为字符串,而不是通过封送到实体

Apache kafka 从Spray POST中提取Json作为字符串,而不是通过封送到实体,apache-kafka,spray-json,Apache Kafka,Spray Json,有一个存在的问题与我所追求的有很大关系: 但是它没有解释如何从指令[string]中获取实际的Json字符串表示。我试图将Json数据作为字符串发送给Kafka,Kafka制作人将其序列化,因此我试图以字符串形式提取Json。我将对Kafka consumer中另一端的实体进行编组。上面的答案链接让我很接近: def rawJson = extract { _.request.entity.asString} case "value2" => rawJson{ json =>//

有一个存在的问题与我所追求的有很大关系:

但是它没有解释如何从指令[string]中获取实际的Json字符串表示。我试图将Json数据作为字符串发送给Kafka,Kafka制作人将其序列化,因此我试图以字符串形式提取Json。我将对Kafka consumer中另一端的实体进行编组。上面的答案链接让我很接近:

def rawJson = extract { _.request.entity.asString}  
case "value2" => rawJson{ json =>// use the json } 

但我最终得到了指令[String]。如何提取字符串?

您引用的示例应该有效。您将使用他们定义的rawJson指令包装内部路由,json字符串将在该内部路由中可用

在下面的示例中,personJson是一个字符串,由请求主体通过rawJson指令提取,并提供给完成其余工作的内部路由

  def rawJson = extract { _.request.entity.asString}

  val personRoute = {
    (post & path("persons")){
      rawJson{ personJson =>
        onSuccess(personService.addPerson(person)){ personWithId =>
          complete(StatusCodes.Created, personWithId)
        }
      }
    }

我提出了以下语法,以满足以字符串形式提取Json的需要。起初,我认为先解组,然后再重新组,效率很低,但后来我意识到这提供了一种即时Json验证的形式。但可能有更有效的方法来做到这一点

API完全是喷雾式的。handleWith使用到RawWeatherData案例类的隐式转换

path("weather"/"data"/"json") {
    handleWith { rawRecord: RawWeatherData =>
        val rawJsonStr = rawRecord.toJson.toString
        kafkaJsonRecordIngest(rawJsonStr)
        rawRecord
    }
}

Eric,谢谢你的回答,但是根据我的问题,我真的需要拿到字符串,这样我可以将它作为序列化字符串发送给Kafka,这可能是你不熟悉的场景。无论如何,到目前为止,我确实提出了一个符合要求的语法场景,我将在下面发布。您确实可以访问字符串-在上面的示例中是personJson。但和许多问题一样,有几种可能的解决方案。听起来你找到了一个适合你的解决方案。Eric,哦,好吧,我说不出来,因为我没有把它放在我的ScalaIDE中,它可以很好地告诉我类型。再次感谢你。