从spray post中提取json作为字符串,而不是通过封送到实体

3duebb1j  于 2021-06-08  发布在  Kafka
关注(0)|答案(2)|浏览(403)

有一个现存的问题包含了我所追求的很多东西:
在spray post路由中提取原始json作为字符串
但是它没有解释如何从指令[string]中获取实际的json字符串表示。我尝试将json数据作为字符串发送给kafka(kafka生产者将其序列化),因此我尝试以字符串形式提取json。我将在kafka consumer的另一端对实体进行编组。上面的答案链接让我很接近:

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

但我最终得到了指令[string]。我怎么把绳子拿出来?

5tmbdcev

5tmbdcev1#

你引用的例子应该有用。您将使用他们定义的rawjson指令 Package 内部路由,并且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)
        }
      }
    }
mlnl4t2r

mlnl4t2r2#

我提出了以下语法,满足了以字符串形式提取json的需要。一开始我认为我先解组,然后再重新组,效率很低,但后来我意识到这提供了一种即时json验证的形式。但可能有更有效的方法来做到这一点。
原料药都是喷雾的。handlewith使用对rawweatherdata case类的隐式转换。

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

相关问题