10

我正在尝试使用 Play 2.1.3 做一些 RESTFull Web 服务 POC

我有以下课程:

case class Student(id: Long,firstName: String,lastName: String) 

现在我想创建 RESTfull URI,它将获取 Json 序列化的学生 POJO 并返回相同的 POJO 作为响应。

implicit val studentReads = Json.reads[Student]
implicit val studentWrites = Json.writes[Student]


def updateStudent = Action(parse.json){
  request=>request.body.validate[Student].map{
    case xs=>Ok(xs)}.recoverTotal{
      e => BadRequest("Detected error:"+ JsError.toFlatJson(e))
    }
  } 

但我收到编译错误 -

Cannot write an instance of entities.Student to HTTP response. Try to define a 
     Writeable[entities.Student]

我只是Writes[A]作为隐式变量提供。

我还缺少什么?

4

1 回答 1

28

我认为问题在于 Ok() 方法无法确定Student需要转换为 json,因为 Ok() 的参数可能会有所不同。

  1. 您可以返回一个Ok(Json.toJson(xs))
  2. 您可以明确指出所需的类型:Ok(xs: JsValue)

并确保所有隐式都在范围内

于 2013-08-24T10:42:36.903 回答