2016-11-05 12 views
1

私はスカラープレイを使用しています! 2.4.xのとsearializeしようとしているケースクラスは:Playフレームワーク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

あなたは 'artifacts'と' events'メンバ '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() 
) 

配列()力が"イベント" を生成するためにJSONを果たしています。私はplay-jsonのものを少し工夫して見つけました。 :(私は本当に私のJavaの過去からGoogle Gsonが欠けている:)死んでシンプルでちょうど動作します。

関連する問題