/ / Класове за форматиране на json - с и без id на обекта - scala, playframework-2.0

Класове случаи за форматиране на json - с и без id на обекта - scala, playframework-2.0, reactivemongo

Аз пиша play2 приложение, което получава данни чрез почивка / json и го съхранява в mongodb използване reactivemongo.

Използвам модел, изграден от казуси и implicit val myFormat = Json.format[myCaseClass]

Понастоящем имам казус за предмети, идващи от монгод. Те съдържат полето _id и всичко работи. Новите входящи обекти естествено нямат това поле за идентификация и така Json.fromJson[myCaseClass](req.body) валидаторът е неуспешен.

Наистина ли трябва да създам друг клас случаи за нови обекти или има повече DRY и елегантно решение, без да дублираме класа и да премахнем _id?

Отговори:

0 за отговор № 1

Бих използвал API за комбиниране на парсера и създавам json формат, или може би просто чете [T], който обработва входящи евентуално id-less полета. Нещо като:

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)

Вижте документите за повече информация: http://www.playframework.com/documentation/2.2.x/ScalaJsonCombinators


0 за отговор № 2

Следвах предложенията и _id: Option[BSONObjectID] прави трик. Не беше необходимо да се прилага четец, защото implicit val userFormat = Json.format[User] е в състояние да създаде макрос, съдържащ опциите.