现有的问题包含了我所追求的大部分内容:
{{3}}
但是如果没有解释如何从指令[String]中获取实际的Json字符串表示,它就会停止。我正在尝试将Json数据作为字符串(Kafka Producer序列化)发送给Kafka,所以我试图以字符串形式提取Json。我将对卡夫卡消费者的另一端的实体进行编组。上面的答案链接让我接近:
def rawJson = extract { _.request.entity.asString}
case "value2" => rawJson{ json =>// use the json }
但我最终得到了指令[String]。如何获取String?
答案 0 :(得分:0)
您引用的示例应该有效。您将使用它们定义的rawJson指令来包装您的内部路由,并且json字符串将在该内部路由中可用。
在下面的示例中,personJson是一个String,由请求的主体通过rawJson指令提取,并且可用于完成其余工作的内部路径。
def rawJson = extract { _.request.entity.asString}
val personRoute = {
(post & path("persons")){
rawJson{ personJson =>
onSuccess(personService.addPerson(person)){ personWithId =>
complete(StatusCodes.Created, personWithId)
}
}
}
答案 1 :(得分:0)
我想出了以下语法,它完成了以String形式提取Json的需要。起初我认为我解组然后再次重新编组效率很低,但后来我意识到这提供了一种即时Json验证的形式。但是可能有更有效的方法来做到这一点。
API都是Spray。 handleWith使用对RawWeatherData案例类的隐式转换。
path("weather"/"data"/"json") {
handleWith { rawRecord: RawWeatherData =>
val rawJsonStr = rawRecord.toJson.toString
kafkaJsonRecordIngest(rawJsonStr)
rawRecord
}
}