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.

См. https://github.com/novus/salat/wiki/JSON

Другие вопросы по тегам