/ / Clases de caso para formatear json - con y sin el ID de objeto - scala, playframework-2.0, reactivemongo

Clases de casos para formatear json - con y sin el ID de objeto - scala, playframework-2.0, reactivemongo

Estoy escribiendo una aplicación play2 que obtiene datos a través de rest / json y los almacena en mongodb usando reactivemongo.

Estoy usando un modelo construido a partir de clases de casos y implicit val myFormat = Json.format[myCaseClass]

Actualmente tengo una clase de caso para objetos que vienen de mongodb. Contienen el campo _id y todo funciona. Naturalmente, los nuevos objetos que entran no tienen este campo de identificación y, por lo tanto, Json.fromJson[myCaseClass](req.body) el validador falla

¿Realmente tengo que crear otra clase de caso para objetos nuevos o hay una solución más SECA y elegante sin duplicar la clase y eliminar el _id?

Respuestas

0 para la respuesta № 1

Yo usaría la API del combinador de analizador y crearía un formato json, o tal vez incluso una Lectura [T], que maneja los campos entrantes posiblemente sin identificación. Algo como:

implicit val readsMyClass: Reads[MyClass] = (
(__  "id").readNullable[Id] and
(__  "someProperty").read[String]
)(create _)

def create(maybeId: Option[Id], someProperty: String) =
MyClass(maybeId.getOrElse(...generate id...), someProperty)

Ver los documentos para más información: http://www.playframework.com/documentation/2.2.x/ScalaJsonCombinators


0 para la respuesta № 2

Seguí las sugerencias y _id: Option[BSONObjectID] Hace el truco. No fue necesario implementar un lector porque implicit val userFormat = Json.format[User] es capaz de crear una macro que contiene las opciones.