Scalatra将对象序列化为JSON,但其关系未序列化

Scalatra将对象序列化为JSON,但其关系未序列化,scala,squeryl,scalatra,Scala,Squeryl,Scalatra,我正在使用Scalatra和Squeryl制作一个单页应用程序示例,因此我需要Scalatra Servlet始终返回JSON。当序列化没有关系的对象时,它工作得非常好 我有一个班级地址,它与班级城市有着千丝万缕的联系: class City(val id: Long, val name: String) extends KeyedEntity[Long] { def this() = this(0, "") } class Address(val id: Long, val street

我正在使用Scalatra和Squeryl制作一个单页应用程序示例,因此我需要Scalatra Servlet始终返回JSON。当序列化没有关系的对象时,它工作得非常好

我有一个班级地址,它与班级城市有着千丝万缕的联系:

class City(val id: Long, val name: String) extends KeyedEntity[Long] {
  def this() = this(0, "")
}

class Address(val id: Long, val street: String, val number: Int, val city_id: Long) 
     extends KeyedEntity[Long] {
  def this() = this(0, "", 0, 0)

  lazy val city = SpaDb.cities2Addresses.rightStateful(this)
}

object SpaDb extends Schema {
  val cities = table[City]("cities")
  val addresses = table[Address]("addresses")
  val cities2Addresses = oneToManyRelation(cities, addresses).via(_.id === _.city_id)
}
这就是我的Servlet:

class SpaServlet extends SpaStack with JacksonJsonSupport {
  before() {
    contentType = formats("json")
  }

  get("/addresses") {
    Address.all   //return all addresses
  }
}
当servlet序列化对象地址时,它会序列化所有属性,但不会序列化关系。结果是:

{"id":1,"street":"Street 1","city_id":1}
我想得到的是:

{"id":1,"street":"Street 1","city_id":1, "city": {"id":1,"name":"MyCity"}}

我可以用这种方式创建json吗?

您是否尝试过在
.rightStateful(this)
调用之后添加
.toList
(不是永久性的,只是为了测试)?听起来您的json序列化程序没有将该集合视为可序列化的。按照类似的思路,您可以尝试使您的类成为案例类。@jcern我已经尝试了这两种方法。我认为问题也在于序列化,我正在查看文档,但我仍然没有找到一种方法来指示必须序列化关系。