2016-11-05 5 views
1

Я использую scala play! 2.4.x и пытается searialize случай класс:Как заставить Play Framework 2.4.x сериализовать поле с пустым списком

case class MyEvent(
    id: String, 
    parentId: Option[ParentRef] = None, 
    stepStatus: String = "undefined", 
    artifacts:Seq[String] = Seq.empty, 
    events:Seq[String] = Seq.empty 
) 

Проблема заключается в том, что сериализованная JSON не содержит полей артефакты и события, поскольку их значения по умолчанию пустые последовательности. Получатель ожидает получить имена полей, даже если они пусты. Я должен заставить JSon сериалайзер добавить «артефактов»: [], «событие»: []

Что такое правильный способ сделать это без написания целого форматировщика вручную? У меня есть десятки полей.

+0

Не могли бы вы сделать элементы 'артефакты' и' события' 'Option [Seq [String]]'? AFAIK нет другого способа, который не требует записи 'Reads/Format' вручную. – Mikesname

+0

Вы имеете в виду на стороне приемника? Нет, это невозможно. – Sergey

+0

При попытке воспроизвести это, похоже, я вижу некоторые различия в поведении между 2.3 и 2.4. Не удалось решить. В 2.3 артефакты и события наиболее определенно присутствуют, и несколько вопросов SO направлены на их подавление. Никакой помощи я не знаю. Сообщите нам, если вы решите. – wwkudu

ответ

0

Так, 2.4.x работает следующим образом:

case class MyEvent(
    id: String, 
    parentId: Option[ParentRef] = None, 
    stepStatus: String = "undefined", 
    artifacts:Seq[String] = Seq(), 
    events:Seq[String] = Seq() 
) 

Seq() силы играют JSON для создания "событий": [], который отлично подходит для меня. Я нахожу игру в стиле play-json немного над спроектированной. :(Я очень скучаю по Google Gson из моего Java-прошлого :) Dead simple и просто работает.