我使用slick-codegen从数据库生成了我的scala模型。现在Json映射器的生成失败了。我怎样才能避免所有的事情都是手工做的?
圆圈:
could not find implicit value for parameter encoder: io.circe.Encoder[UserController.this.db.UsersRowplay-json:
implicit val userFormat = Json.format[models.Tables#UsersRow]
No unapply or unapplySeq function found for class UsersRow: <none> / <none>slick-codegen生成的代码如下所示:
package models
object Tables extends {
val profile = slick.jdbc.PostgresProfile
} with Tables
trait Tables {
val profile: slick.jdbc.JdbcProfile
import profile.api._
case class UsersRow(id: Int, username: String)
//lots more code
}发布于 2019-05-23 14:38:02
您可以使用自己的SourceCodeGenerator为每个case类创建一个circe隐式半自动派生。
https://circe.github.io/circe/codecs/semiauto-derivation.html
代码应该看起来像...
new slick.codegen.SourceCodeGenerator(model){
val importCirce =
"import io.circe.Encoder\nimport io.circe.generic.semiauto._"
val implicits = model.tables.map(t => {
val name = entityName(t.name.table)
s"implicit val ${name}Encoder: Encoder[${name}] = deriveEncoder[${name}]\n"
}).mkString("\n")
override def code: String =
super.code + "\n" + importCirce + "\n\n" + implicits
}创建模型后,解码器或编码器就已经可用了
import models.Tables._
val user = new User("Peter", 1)
println {
user.asJson
}你可以在这里查看完整的例子https://github.com/jgoday/scala-slick-customcodegen
https://stackoverflow.com/questions/56153365
复制相似问题