Http4s EntityDecoder 不是针对简单情况自动派生的 class
Http4s EntityDecoder not being auto derived for simple case class
我收到这个错误:
Cannot decode into a value of type com.blah.rest.model.UserProfile,
because no EntityDecoder[cats.effect.IO, com.blah.rest.model.UserProfile]
instance could be found.
对于以下情况class:
case class UserProfile(id: Option[Int], firstName: String, lastName: String)
在 POST
代码上遇到错误:
case req @ POST -> Root / "v1" / "profiles" =>
req.as[UserProfile] flatMap {(up: UserProfile) =>
Ok(service.createProfile(up).asJson)
}
正文如下POST
:
{
"firstName": "Jack",
"lastName": "Appleseed"
}
我认为当正文在 req.as[UserProfile]
中转换为 UserProfile
时会发生这种情况!
但是,这是一个普通的案例 class,EntityDecoder
应该是自动派生的!我知道 akka-http
做到了!
任何ideas/suggestions?
请注意:Http4sVersion = "0.18.0-M4"
和 circe version "0.9.0-M1"
答案是:
req.decodeJson[UserProfile] flatMap {(up: UserProfile) =>
Ok(service.createProfile(up).asJson)
}
你得到它的原因是从 Circe 解码器到 http4s EntityDecoder 的桥梁不是隐含的。如果你纯粹是 JSON API,你可以做一个,但这不是图书馆通常可以做的假设。
添加此依赖项:
"io.circe" %% "circe-generic" % "0.9.1"
为我解决了 类 到 JSON 的自动编码问题。
它允许所需的导入:import io.circe.generic.auto._
我收到这个错误:
Cannot decode into a value of type com.blah.rest.model.UserProfile,
because no EntityDecoder[cats.effect.IO, com.blah.rest.model.UserProfile]
instance could be found.
对于以下情况class:
case class UserProfile(id: Option[Int], firstName: String, lastName: String)
在 POST
代码上遇到错误:
case req @ POST -> Root / "v1" / "profiles" =>
req.as[UserProfile] flatMap {(up: UserProfile) =>
Ok(service.createProfile(up).asJson)
}
正文如下POST
:
{
"firstName": "Jack",
"lastName": "Appleseed"
}
我认为当正文在 req.as[UserProfile]
中转换为 UserProfile
时会发生这种情况!
但是,这是一个普通的案例 class,EntityDecoder
应该是自动派生的!我知道 akka-http
做到了!
任何ideas/suggestions?
请注意:Http4sVersion = "0.18.0-M4"
和 circe version "0.9.0-M1"
答案是:
req.decodeJson[UserProfile] flatMap {(up: UserProfile) =>
Ok(service.createProfile(up).asJson)
}
你得到它的原因是从 Circe 解码器到 http4s EntityDecoder 的桥梁不是隐含的。如果你纯粹是 JSON API,你可以做一个,但这不是图书馆通常可以做的假设。
添加此依赖项:
"io.circe" %% "circe-generic" % "0.9.1"
为我解决了 类 到 JSON 的自动编码问题。
它允许所需的导入:import io.circe.generic.auto._