玩2.3 Jongo ObjectId转自定义ID
Play 2.3 Jongo ObjectId to custom ID
我将 Play 2.3 scala 与 play-jongo 一起使用:
"uk.co.panaxiom" %% "play-jongo" % "0.7.1-jongo1.0"
我有 scala 案例 class:
import org.jongo.marshall.jackson.oid.Id
case class User(@Id id: String, name: String)
当我使用 Jongo 保存一些用户时 PlayJongo.getCollection("users").save(User("uuid","user name"))
我的数据库中有以下内容:
{
"_id" : { "$oid" : "5612a4effa93746a877c0d5c"} ,
"id" : "uuid",
"name": "user name"
}
当需要的结果是字符串值 _id
时,它映射到 Scala 中的 id
属性 class:
{
"_id" : "uuid",
"name": "user name"
}
当我将 scala 案例 class 转换为 Java POJO 时,一切正常(下面的简单示例)。在这种情况下,我得到了所需的结果。
public class User {
@Id
public String id;
public String name;
}
我做错了什么?如何让 jackson/jongo 正确理解 @Id
注释?
在 other SO answers 中有使用 @Id
注释的建议 - 我使用了 - 但没有成功。
所以 RTFM 规则终究是有回报的。在play-jongo readme中说明,在项目中添加Jackson Module Scala
依赖并配置mapper即可。
添加对build.sbt
的依赖:
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.6.1",
在 application.conf
中配置映射器
playjongo.mapperfactory="uk.co.panaxiom.playjongo.JongoScalaMapperFactory"
我将 Play 2.3 scala 与 play-jongo 一起使用:
"uk.co.panaxiom" %% "play-jongo" % "0.7.1-jongo1.0"
我有 scala 案例 class:
import org.jongo.marshall.jackson.oid.Id
case class User(@Id id: String, name: String)
当我使用 Jongo 保存一些用户时 PlayJongo.getCollection("users").save(User("uuid","user name"))
我的数据库中有以下内容:
{
"_id" : { "$oid" : "5612a4effa93746a877c0d5c"} ,
"id" : "uuid",
"name": "user name"
}
当需要的结果是字符串值 _id
时,它映射到 Scala 中的 id
属性 class:
{
"_id" : "uuid",
"name": "user name"
}
当我将 scala 案例 class 转换为 Java POJO 时,一切正常(下面的简单示例)。在这种情况下,我得到了所需的结果。
public class User {
@Id
public String id;
public String name;
}
我做错了什么?如何让 jackson/jongo 正确理解 @Id
注释?
在 other SO answers 中有使用 @Id
注释的建议 - 我使用了 - 但没有成功。
所以 RTFM 规则终究是有回报的。在play-jongo readme中说明,在项目中添加Jackson Module Scala
依赖并配置mapper即可。
添加对build.sbt
的依赖:
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.6.1",
在 application.conf
playjongo.mapperfactory="uk.co.panaxiom.playjongo.JongoScalaMapperFactory"