我是否可以使用配套对象来管理萨拉特案例类 DTO 的范围



我一直在Play2 web应用程序中使用Salat进行MongoDB交互(通过Leon Radley的简洁SBT插件)。 效果很好,但是由于嵌套(镜像嵌套的 JSON/BSON 模型定义)我们有许多案例类 DTO,我们希望在基本模型类型的配套对象中整齐地定义嵌套的案例类 DTO。

这可以防止在我们的 Salat 数据访问层中激增的案例类 DTO 汤中的命名空间冲突。 例如,我们定义了一个"描述"案例类,但它是为不同的模型对象重新定义的,所以我们想要一种简洁的方式来命名它。 为此,我们尝试使用配套对象,如以下小片段/示例所示:

package models.mongo
import com.novus.salat._
import com.mongodb.casbah.Imports._
import se.radley.plugin.salat._
case class TestSalatDto(
  id: ObjectId = new ObjectId,
  title: String,
  description: TestSalatDto.Description)
object TestSalatDto {
  case class Description(
    brief: String,
    full: String)
}

这一切都编译得很好,但在运行时失败了,com.novus.salat.util.ToObjectGlitch:从Mongo解组期间参数类型不匹配。

如果我们只是简单地将伴随对象定义切换到包定义(封装 DTO 汤的一种稍微混乱的方式),那么一切正常(解组是一种享受)。

我很困惑为什么在对象中声明案例类在

运行时失败;有没有在对象中定义案例类(Salat DTO)的技巧?

我不会尝试在同一来源中使用案例类和同名的单例。case 类创建自己的比较对象,该对象与您的单例冲突。我的解决方案是没有配套对象,只有类 TestSalatDtoDescription(不管是什么)

您的问题是 Salat 目前不支持嵌套类。

不起作用:

object TestSalatDto {
  case class Description(
  brief: String,
  full: String)
}

工作正常:

case class Description( /* etc etc */)
case class TestSalatDto(description: Description, /* etc etc*/)

相关内容

  • 没有找到相关文章

最新更新