2011-09-17 9 views
5

Ho fatto questa domanda nel gruppo di livello scala salat Google, ma non ci sono risposte per alcuni giorni, quindi ci provo qui.Salat non deserializzazione di insiemi che si associano all'opzione [Imposta [A]]

Ho una classe di caso che ha una collezione avvolta in un Option.

case class SomeClass(
    var name:Option[String]=None, 
    var addresses:Option[Set[Address]]=None 
) 

case class Address(
    var street:Option[String]=None, 
    var zip:Option[String]=None 
) 

Il documento viene memorizzato correttamente in Mongo. Tuttavia, quando provo a ottenere questo utilizzando findOne (con o senza SalatDAO) il campo degli indirizzi ha testo JSON che rappresenta gli indirizzi anziché la classe case Address.

Come risultato, Lift-JSON salta tutti i campi nella mia classe di caso con Option[Collection[A]] in esso. Quando rimuovo lo Option e vado semplicemente con addresses=Set[Address](), funziona. Comunque ora finisco con set vuoti nel mio JSON dove non ci sono dati, e non ho modo di scoprire su un aggiornamento se il consumatore ha rimosso le voci, o sto ottenendo un vuoto Set perché il consumatore non ha inviato questo campo nella richiesta originale.

L'utilizzo di Option avrebbe impostato il campo su None, il che significherebbe che non dovrei preoccuparmi che sia vuoto o modificato.

Qualsiasi aiuto sarà molto apprezzato.

risposta

4

Siamo spiacenti, Salat non supporta attualmente un'opzione che contiene una raccolta.

+1

Thx per unire :) – AndreasScheinert

+0

Tutte le idee su quando potrebbe essere sostenuto? Non voglio davvero tornare a usare Morphia :( – lobster1234

1

Ora Salat offre la funzionalità JSON supportata da lift-json, quindi è possibile evitare questo disordine Option [Set [A]] in primo luogo.

La trasformazione JSON di Salat supporta gli argomenti predefiniti, tutte le annotazioni Salat e la serializzazione personalizzata e la serializzazione ObjectId.

Vedi https://github.com/novus/salat/wiki/JSON