2012-08-28 32 views
0

案例

此案例正在使用Scala,Play Framework,Jerkson和Squeryl。我试图将查询结果集转换为JSON,但结果只显示'持久'字段。如何将Squeryl查询对象转换为JSON - 播放框架

问题

为什么Json.generate()不打印所有的实体领域?

控制器

package controllers.api 

import play.api.mvc._ 
import play.Logger 
import play.api.data.Form 
import play.api.data.Forms.{mapping, text, optional} 
import com.codahale.jerkson.Json 
import org.squeryl.PrimitiveTypeMode._ 
import models.{ApplicationDatabase, Category} 


object Categories extends Controller { 

    def findAll = Action { 
    val json = inTransaction { 
     val list = from(ApplicationDatabase.categories)(categories => 
     select(categories) 
     orderBy(categories.title) 
    )  
     Logger.info(list.toString) 
     Json.generate(list) 
    } 

    Ok(json).as(JSON) 
    } 

    def findById(id: Long) = Action { 
    val category = inTransaction { 
     ApplicationDatabase.categories.lookup(id) 
    } 

    Ok(Json.generate(category)).as(JSON) 
    } 

} 

类别实体

package models 

import org.squeryl.PrimitiveTypeMode._  
import org.squeryl.annotations.Column 


class Category(var uid: String, var title: String) extends FlashcardsDbObject { 

} 

基实体

package models; 

import java.sql.Timestamp  
import org.squeryl._ 
import org.squeryl.annotations.{Column} 
import org.squeryl.PrimitiveTypeMode._ 

class FlashcardsDbObject extends KeyedEntity[Long] { 

    val id: Long = 0 

    @Column("created_at") 
    var createdAt = new Timestamp(System.currentTimeMillis) 


    @Column("updated_at") 
    var updatedAt = new Timestamp(System.currentTimeMillis) 

} 

问题

结果

{ 
    persisted: true 
}, 
{ 
    persisted: true 
}, 

预计

{ 
    id: 1, 
    uid: 'chemistry', 
    title: 'Chemistry' 
    persisted: true 
}, 
{ 
    id: 2, 
    uid: 'biology', 
    title: 'Biology' 
    persisted: true 
}, 
+0

哦,我从James Ward,Ryan Knight的文章中得到了这个例子: [Artima article](http://www.artima.com/articles/play2_scala_squeryl.html) [GitHub code](https:// github的.com/jamesward/play2bars /斑点/阶-squeryl /应用/控制器/ Application.scala) – danielnegri

回答

0

也许这是不是最好的解决办法,但是当我导入,并宣布JsonProperty到现场为我工作:

package models 

import org.squeryl.KeyedEntity 
import org.squeryl.annotations._ 
import org.squeryl.PrimitiveTypeMode._ 
import org.codehaus.jackson.annotate.JsonProperty 


case class Category(val id: Int = 0, 
        @JsonProperty("uid") 
        val uid: String, 
        @JsonProperty("title") 
        val title: String) extends KeyedEntity[Int] { 

} 

结果

[ 
    { 
    id: 3, 
    uid: "biology", 
    title: "Biology" 
    }, 
    { 
    id: 1, 
    uid: "general-chemistry", 
    title: "General Chemistry" 
    }, 
    { 
    id: 4, 
    uid: "organic-chemistry", 
    title: "Organic Chemistry" 
    }, 
    { 
    id: 2, 
    uid: "physics", 
    title: "Physics" 
    } 
]