Apache kafka 从Spray POST中提取Json作为字符串,而不是通过封送到实体
有一个存在的问题与我所追求的有很大关系: 但是它没有解释如何从指令[string]中获取实际的Json字符串表示。我试图将Json数据作为字符串发送给Kafka,Kafka制作人将其序列化,因此我试图以字符串形式提取Json。我将对Kafka consumer中另一端的实体进行编组。上面的答案链接让我很接近: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 =>//
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中,它可以很好地告诉我类型。再次感谢你。