Embedded lists dans les resultats des services REST mappés

Tags: #<Tag:0x00007f0ff87b5430>
Embedded lists dans les resultats des services REST mappés
0

Suite à demande par mail.

La possibilité d’embedder des listes d’objet liés sur les services REST mappés à été mise en place sur la bracnhe master(actuellement P24)

Une variante de la méthode addRefField a été ajoutée (cf. https://docs.simplicite.io/4.0/javadoc-alpha/com/simplicite/webapp/services/RESTMappedObjectsExternalObject.html#addRefField(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,boolean,java.lang.String)) qui permet de:

  1. nommer explicitement le lien (c’est optionnel, si on met null c’est le nommage de l’objet lié qui est utilisé), ce nommage spécifique du lien n’est utile que pour lever les ambiguïtés s’il y a 2 liens (ou plus) entre 2 mêmes objets…
  2. choisir le mode embedded ou non

Exemple d’utilisation (sur la démo):

Avec le mapping suivant

boolean embed = true; // or false

addObject("suppliers", "DemoSupplier");
addField("suppliers", "code", "demoSupCode");
addField("suppliers", "name", "demoSupName");

addObject("products", "DemoProduct", "Products");
addField("products", "reference", "demoPrdReference");
addField("products", "name", "demoPrdName");
addRefField("products", "suppliers", "supplierId", "demoPrdSupId", null, embed, null);

le resultat d’un search (filtré pour ne retourner qu’un record supplier pour plus de lisibilité /suppliers?code=PEAR ) est:

  • En mode non embedded (false):
{"suppliers": [{
  "row_id": "4",
  "code": "PEAR",
  "name": "Pear Inc",
  "_links": [{
    "rel": "products",
    "href": "suppliers/4/products"
  }]
}]}
  • Et en mode embedded (true):
{"suppliers": [{
  "row_id": "4",
  "code": "PEAR",
  "name": "Pear Inc",
  "products": [
    {
      "row_id": "7",
      "supplierId": "4",
      "reference": "REF001",
      "name": "Tablet"
    },
    {
      "row_id": "8",
      "supplierId": "4",
      "reference": "REF002",
      "name": "Smartphone"
    }
  ]
}]}

Le résultat d’un select (sur le même record supplier que ci-dessus /suppliers/4):

  • En mode non embedded (false):
{
  "row_id": "4",
  "code": "PEAR",
  "name": "Pear Inc",
  "_links": [{
    "rel": "products",
    "href": "suppliers/4/products"
  }]
}
  • Et en mode embedded (true):
{
  "row_id": "4",
  "code": "PEAR",
  "name": "Pear Inc",
  "products": [
    {
      "row_id": "7",
      "supplierId": "4",
      "reference": "REF001",
      "name": "Tablet"
    },
    {
      "row_id": "8",
      "supplierId": "4",
      "reference": "REF002",
      "name": "Smartphone"
    }
  ]
}