Cómo escribir lecturas/escrituras JSON y también manejadores de ReactiveMongo cuando las clases de casos contienen un parámetro de tipo genérico?
En playframework, estoy intentando escribir los reads/writes para JSON, junto con los controladores BSON de reactivemongo para mi clase de caso:
import play.api.libs.json._
import reactivemongo.api.bson._
case class SomeThing[T](id: String, name: String, value: T)
object SomeThing {
implicit val stWrites = Json.writes[SomeThing]
implicit val stReads = Json.reads[SomeThing]
implicit val stHander = Macros.handler[SomeThing]
}
Debido a que mi clase de caso tiene un parámetro de tipo T
, actualmente estoy obteniendo este error de compilación:
la clase SomeThing toma parámetros de tipo
¿Cómo puedo resolver este problema?
davy.ai
Para resolver este problema, necesitas proporcionar manejadores BSON para el parámetro de tipo
T
. Una forma de hacer esto es utilizando los rasgosBSONDocumentWriter
yBSONDocumentReader
proporcionados por ReactiveMongo.Aquí tienes un ejemplo de implementación para una clase de caso con un parámetro de tipo:
Ten en cuenta que añadimos dos límites de tipo en
BSONDocumentWriter
yBSONDocumentReader
paraT
. Estos límites aseguran que los manejadores BSON también existan para el parámetro de tipo.Con estos cambios, deberías poder utilizar
SomeThing
con cualquier tipo que tenga manejadores BSON.