我尝试将post请求有效负载解组为字符串数组,但失败,出现400个错误请求,错误如下:
请求内容格式不正确:应为JsString形式的字符串,但得到的是{"应用程序":{"应用程序修订版本":{"字符串":" 27904 "},"应用程序版本":"印度","ID":"132231","名称":"应用程序测试"},"访客":{"会话":"12bvg","系统时间":"2021年8月24日T21:19:13.282Z","访问者ID":"abc "}}
发布请求的正文:
[{"application":{"applicationRevision":{"string":"27904"},"applicationVersion":"india","id":"132231","name":"appTest"},"guest":{"session":"12bvg","systemTime":"2021-08-24T21:19:13.282Z","visitorId":"abc"}}]
下面是代码:
def genericEventRoute: Route =
path(basePath / version / "event" / "generic") {
concat(
post {
entity(as[Array[String]]) { inputs =>
extractClientIP { ip =>
val ipAddress = ip.toOption.map(_.getHostAddress).getOrElse("unknown")
system.log.info(s"ipAddress : $ipAddress")
val operationPerformed: Future[IncomingIngest.Response] = incomingIngest.ask(IncomingIngest.ConsumeGenericEvent(inputs, ipAddress, _))
onSuccess(operationPerformed) {
case IncomingIngest.OK(message) => complete(StatusCodes.Created, List(`Content-Type`(`application/json`)), message)
case IncomingIngest.KO(error) => complete(StatusCodes.BadRequest, error)
}
}
}
}
)
}
我怎么能解组成字符串数组!!如果我在请求中发送一个字符串,省略***[]***并使用**实体,这是有效的(as [String])在路由中。但是,我应该获得的有效负载将是字符串数组。有一种方法可以使用case类来解开有效负载,但为了做到这一点,json里面的所有字段都必须被Map,这是我不想要的。路由应该用字符串数组来处理通用负载。你能建议一种方法吗?
1条答案
按热度按时间dced5bon1#
传入的输入是一个JsArray,所以必须将其转换为scala向量/字符串列表,然后进行相应的处理。
请记住,***arrInput***的类型为***Vector[String]***。尽管最好的方法是创建一个case类,并将json直接解析为Tim在注解中提到的类型。但是,对于那些传入消息不遵循任何特定格式的用例,这可能会导致解析错误。这样,我们可以接受任何传入消息并将其推送到可以验证有效载荷的下游。