Nous sommes amenés dans certains cas à gérer un sous-ensemble d’information structurée au format JSON à la maille object field. Le type primitif utilisé dans ce contexte est “Texte long” et les opérations réalisées sont supportées par des instances de JSONObject sérialisées/désérialisées lors des interactions avec le modèle logique.
Lorsque l’attribut d’objet est exposé via une API, le contenu de l’object field est servi en tant que String
Par extension de cette logique, est-il envisageable que les autres types primitifs soient servis tels que dans le body json ? (entiers et booléen en particulier)
Normalement il suffit mettre le rendering JSON sur l’attribut de type texte long pour que celui-ci soit servi en tant que “raw” JSON au niveau des APIs standards:
A vérifier si c’est géré dans les APIs “mapped”, j’ai un doute sur ce point.
PS:
S’agissant de JSON “contraint” il est classique d’implémenter une validation vs un schema JSON dans le postValidate (le schema JSON en question pouvant, par exemple, être stocké dans une ressource de type JSON) :
String schema = HTMLTool.getResourceJSONContent(getGrant(), "MY_JSON_SCHEMA");
List<String> errs = new JSONSchemaTool(schema).validateJSON(getFieldValue("myJSONField"));
Cela garantira que la réponse JSON de l’appel API sera structurellement correcte
Ce sera livré en v7, en v6 (6.2.22 & 6.3.1) et en v5 (5.3.83)
Attention vérifier que cette correction ne provoquera pas de régressions du coté des clients de ces APIs qui auraient contourné le pb en faisant un parsing JSON de la valeur JSON renvoyée sous forme de chaine de caractères (la correction en question ne concerne bien que les fields de type texte long avec rendering JSON)