【发布时间】:2015-08-20 21:15:27
【问题描述】:
我刚刚开始使用 scala 和 play 框架,并陷入了这个看似简单的问题。
我有一个 REST 端点,我将向其发布一些 Json 对象。该 Json 对象需要转换为实体。
实体声明为case类类型,接收到的Json可以是case类中的任意一种。
我的问题是,我无法将 Json 转换为相应的实体类型,因为(根据教程)我需要在验证中编写 implicit Reads 并定义每个字段。
例如
implicit val emailReads: Reads[Email] = (
(JsPath \ "from").read[String] and
(JsPath \ "subject").read[String]
)(Email.apply _)
适用于示例案例类电子邮件。但是当我有这样的案例类时:
abstract class Event
case class OneEventType(type : String) extends Event
case class TwoEventType(type : String, attribute : SomeType) extends Event
控制器方法基于事件工作:
def events = Action(BodyParsers.parse.json) { request =>
val eventReceived = request.body.validate[Event]
//do something
Ok(Json.obj("status" ->"OK"))
}
我将如何验证事件并构造正确的事件对象,就像在 Reads 方法中我需要指定每个字段一样?
【问题讨论】:
标签: json scala rest playframework-2.0 deserialization