0

Case

This case are using Scala, Play Framework, Jerkson and Squeryl. I'm trying to convert the query resultset to JSON but the result presents just the 'persisted' field.

Question

Why the Json.generate() is not printing all entity fields?

Controller

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)
  }

}

Category Entity

package models

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


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

}

Base Entity

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)

}

Problem

Result

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

Expected

{
  id: 1,
  uid: 'chemistry',
  title: 'Chemistry'
  persisted: true
},
{
  id: 2,
  uid: 'biology',
  title: 'Biology'
  persisted: true
},
Samuel
  • 1,667
  • 12
  • 18
flapjack
  • 704
  • 1
  • 8
  • 13
  • Oh, I got this example from James Ward, Ryan Knight article: [Artima article](http://www.artima.com/articles/play2_scala_squeryl.html) [GitHub code](https://github.com/jamesward/play2bars/blob/scala-squeryl/app/controllers/Application.scala) – flapjack Aug 28 '12 at 01:34

1 Answers1

0

Probably this is not the best solution but when I imported and declared JsonProperty into the field worked for me:

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] {

}

Result

[
  {
    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"
  }
]
flapjack
  • 704
  • 1
  • 8
  • 13