2016-03-28 2 views
0

Как я могу получить OWrite [Список [A]], когда у меня есть OWrites [A]? Он чувствует, что это должно быть легко, но я возиться и не могу добраться туда.Play Framework Scala, OWrites [List [A]]?

Существует OWrites.list [A] метод, но он возвращает Записывает [List [A]] ..

+0

Вы действительно понимаете, что означает 'OWrites'? Это специализированная версия 'Writes', которую вы должны использовать, когда вы уверены, что получите' JsObject', а не 'JsValue', который может быть чем угодно. Для списков естественно хранить как 'JsArray', а не' JsObject'. –

+0

Да, действительно, мне это не нужно - спасибо. Надеюсь, этот вопрос не будет больше downvotes ..:/ – ticofab

+0

Для записи, это был не я, который отказался от этого. Я думаю, что это совершенно правильный вопрос. –

ответ

1

OWrites предназначен для сериализации JsObject специфически, в отличие от Writes, который работает для всех JsValue с , Осуществлению можно найти здесь:

https://github.com/playframework/playframework/blob/master/framework/src/play-json/src/main/scala/play/api/libs/json/Writes.scala

trait Writes[-A] { 
    def writes(o: A): JsValue 
    ... 
} 

trait OWrites[-A] extends Writes[A] { 
    def writes(o: A): JsObject 
    ... 
} 

Идея это сказать тип системы, что ваш объект будет сериализовать JsObject вместо общего JsValue, что заставило бы вас обратное приведение.

Было бы неестественно, чтобы сохранить List в JsObject, вы должны создать поле внутри, что бы провести JsArray и вы можете сделать это, создавая собственный экземпляр OWrites и поэтому нет OWrites для списки. Однако очевидным решением является просто использовать Writes и оставить ваш List в пределах JsArray.

Смежные вопросы