2017-12-06 8 views
1

デフォルトでは、akka-httpは、json(、つまり{"some_key":""})の空の文字列をSome("")にデシリアライズします。akka-http。代理オプション値

すべてのモデルのOption[String]タイプでakka-httpを空の文字列を非直列化する方法None

答えて

2

Akka-httpはデフォルトでspray-jsonを使用しているため、カスタム動作を指定してデフォルトの動作を上書きするだけで済みます。あなたの探しているものを得るための簡単な方法はここにあります:(このモデルをすべてのモデルに組み込む)

trait CustomJsonMarshalling { 
    implicit object OptionFormat extends JsonFormat[Option[String]] { 
    def write(str: Option[String]) = JsString(str.getOrElse("")) 

    def read(str: JsValue) = { 
     str match { 
     case JsString(s) => if (s.isEmpty) None else Some(s) 
     case _ => throw new DeserializationException("Expected non empty string") 
     } 
    } 
    } 
} 
+0

正直なところ、SPRAY Jsonは非常に限られています。私はplay-jsonを提案します。もしあなたがjavaのためにscalaまたはjacksonを使って作業しているなら。 –

+0

私はどちらかについて強い意見は持っていませんが(両方を使用しています)、スプレーjsonは最初からあり、最も一般的な使用例をカバーし、必要に応じてカスタマイズする方法を提供します。 – saheb