2017-09-16 1 views
0

J'utilise SCALA 2.11 et j'ai une classe de cas avec 23 éléments qui correspondent à un message Json. Mais étant donné que la limite de 23 champs existe toujours pour les fonctions, je regarde comment construire cette classe de cas pour JSON. Cela a été très bien expliqué pour les tables here mais j'essaye d'appliquer ceci à un exemple de json.Dans SCALA, comment peut-on construire une classe de cas à partir de plusieurs tuples pour gérer plus de 22 champs dans json?

À l'heure actuelle, SCALA génère une erreur de compilation pour celui-ci. TestJson est une classe de cas qui correspond à un message Json avec 23 champs (il est fixe et le format du message est également immuable).

implicit val testJsonReads: Reads[ TestJson ] = (
     (JsPath \ "val1").read[String] and 
     : 
     : 
     : 
     (JsPath \ "val23").read[String])(TestJson.apply _) 

Je suis en train de briser les 23 valeurs dans tuples pour éviter l'erreur de compilation et d'appliquer aussi (pour les lectures) et unapply (Pour les écritures). Comment puis-je atteindre cet objectif ?

Répondre

2

Scala case having 22 fields but having issue with play-json in scala 2.11.5

Cela répond explique comment le faire.

Mais si j'ai plus de 22 champs dans ma classe de cas, je préfère le diviser en groupes logiques de classes de cas.

case class GeneralInfo(....) 
object GeneralInfo { implicit val format = Json.format[GeneralInfo] } 

case class Details(...) 
object Details { implicit val format = Json.format[Details] } 

case class MyRequest(generalInfo: GeneralInfo, details: Details) 
object MyRequest { implicit val format = Json.format[MyRequest] } 
+1

De plus on peut se demander si une classe de cas avec des propriétés beaucoup au même niveau/sans structure est une bonne pratique – cchantep

+1

@cchantep » ..... si des propriétés beaucoup au même niveau est une bonne pratique "- Cela a été expliqué à plusieurs reprises. Personne ne le fait par principe, mais c'est l'un des objectifs mêmes de la classe de cas - pour la cartographie. Il est déraisonnable et peu pratique de demander à d'autres équipes d'imposer une limite de champ à leurs données (json, tables DB, etc.) parce que notre application SCALA ne peut pas le gérer. – user1554876

+1

C'est le but d'un bon mappage pour appliquer les règles du modèle dans le domaine cible. Même si DB ou JSON est "laid", le mapping est capable de le modéliser avec de belles classes de cas qui ont du sens – cchantep