使用 circe 的 AWS API 网关的自定义解码器
Custom decoder for AWS API Gateway using circe
我想使用 circe-core
为 AWS API 网关创建自定义解码器。我有以下代码:
case class APIGatewayInput(body:Result[Body], queryParams: Map[String,String], pathParams: Map[String,String])
object ApiGatewayInput {
implicit val decodeApiGatewayInput = Decoder.instance { c =>
val body:Result[Body] = c.get[Body]("body")
val queryParams = c.field("queryStringParameters").as[Map[String,String]](decoder???)
APIGatewayInput(body, queryParams, similarForPathParams)
}
}
我知道 Result
有将数据解析为 Map[K,V]
的方法,而 as
需要 Decoder
(这有点令人困惑),我可以将其转换为一个 Map[String, String]
如何使用 API 将现有的 Scala 集合类型转换为 HCursor
而不是自定义类型。
import io.circe._, io.circe.generic.auto._, io.circe.parser._,
io.circe.syntax._
case class Test(a: Map[String,String])
val map = Test(Map("a"->"1","2"->"2")).asJson
val hcursor = map.hcursor
val m = hcursor.downField("a").as[Map[String,String]]
println(m) // Right(Map(a -> 1, 2 -> 2))
我想使用 circe-core
为 AWS API 网关创建自定义解码器。我有以下代码:
case class APIGatewayInput(body:Result[Body], queryParams: Map[String,String], pathParams: Map[String,String])
object ApiGatewayInput {
implicit val decodeApiGatewayInput = Decoder.instance { c =>
val body:Result[Body] = c.get[Body]("body")
val queryParams = c.field("queryStringParameters").as[Map[String,String]](decoder???)
APIGatewayInput(body, queryParams, similarForPathParams)
}
}
我知道 Result
有将数据解析为 Map[K,V]
的方法,而 as
需要 Decoder
(这有点令人困惑),我可以将其转换为一个 Map[String, String]
如何使用 API 将现有的 Scala 集合类型转换为 HCursor
而不是自定义类型。
import io.circe._, io.circe.generic.auto._, io.circe.parser._,
io.circe.syntax._
case class Test(a: Map[String,String])
val map = Test(Map("a"->"1","2"->"2")).asJson
val hcursor = map.hcursor
val m = hcursor.downField("a").as[Map[String,String]]
println(m) // Right(Map(a -> 1, 2 -> 2))