J'ai une grande classe de cas avec plus de 10 champs, qui représente un payload JSON, qui vient de l'utilisateur. La plupart des champs sont optionnels, donc j'utilise Option
dans ce cas ( Option[String]
pour les champs de type chaîne de caractères. C'est une bonne approche, jusqu'à ce que j'aie besoin d'une séquence optionnelle. Je pense qu'écrire Option[Seq[String]] est bizarre, car une séquence vide suffit à montrer qu'il n'y a pas de données (pour quelque raison que ce soit). Je pourrais cependant gérer cela de manière manuelle :
implicit val reads = new Reads[MyCaseClass] {
def reads(js: JsValue): JsResult[MyCaseClass] = {
JsSuccess(MyCaseClass(
(js \ "unit_code").as[String],
// other fields omited
(js \ "positions").asOpt[Seq[String]] match {
case Some(seq: Seq[String]) => seq
case None => Seq.empty[String]
}
))
}
}
Mais je ne veux pas écrire toutes ces choses manuellement. Il pourrait y avoir des erreurs, je dois les tester séparément, et, à coup sûr, cela prend beaucoup plus de temps que d'écrire implicit val f = Json.format[MyCaseClass]
.
Existe-t-il une option permettant de traiter séparément un seul champ et de laisser les autres champs traités dans la macro par défaut ?