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 № 1Yo 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.