Salat не десериализует коллекции, которые отображаются в Option[Set[A]]
Я задал этот вопрос в группе Google scala-salat, но не получил ответа в течение нескольких дней, поэтому пытался здесь.
У меня есть класс case, который имеет коллекцию, завернутую в 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
)
Документ хранится в Монго просто отлично. Тем не менее, когда я пытаюсь получить это с помощью findOne
(с или без SalatDAO
) поле адреса содержит текст JSON, представляющий адреса, а не класс регистра адресов.
В результате Lift-JSON пропускает любые поля в моем случае с Option[Collection[A]]
в этом. Когда я удаляю Option
и просто идти с addresses=Set[Address]()
, оно работает. Однако теперь я заканчиваю с пустыми наборами в моем JSON, где нет данных, и у меня нет возможности узнать по обновлению, удалил ли потребитель записи, или я получаю пустое Set
потому что потребитель не отправил это поле в исходном запросе.
С помощью Option
установил бы поле в None
Это означало бы, что мне не придется беспокоиться о том, что он пуст или изменен.
Любая помощь будет оценена.
2 ответа
К сожалению, Salat в настоящее время не поддерживает опцию, которая содержит коллекцию.
Теперь Salat предлагает функциональность JSON, поддерживаемую lift-json, так что вы можете избежать этой путаницы Option[Set[A]].
Преобразование JSON в Salat поддерживает аргументы по умолчанию, все аннотации Salat, а также настраиваемую сериализацию даты и ObjectId.