2

J'utilise Spring Data JPA et Spring Data Rest pour exposer mes entités JPA en tant que service Web. Mes entités ont plusieurs centaines d'attributs et un (très) grand nombre de relations avec d'autres entités qui ont également des centaines d'attributs. Je souhaite que l'utilisateur puisse transmettre un paramètre de requête lui permettant de récupérer uniquement les champs du corps de la réponse JSON dont il est question. Dans le passé, j'ai travaillé avec l'API REST Rational Team Concert d'IBM et ils permettent à l'appelant de transmettre une requête XPath pour sélectionner les champs qu'il souhaite renvoyer. Leur intégration XPath a également permis à l'appelant d'appliquer une logique de filtrage sur les champs individuels. Par exemple, voici ce qui était possible avec cette API:Filtrer la réponse de l'API json en fonction du paramètre de requête

workitem/workItem [créateur/name = 'Bob Sacremento' ou propriétaire/name = 'Bob Sacremento']/(id | résumé)

^Le La requête ci-dessus retournera les champs id et summary de tous les éléments workItem dont le propriétaire ou le créateur a un nom égal à Bob Sacremento.

workitem/workItem/(id | résumé | commentaires [créateur/name = 'Bob Sacremento']/contenu)

^La requête ci-dessus renvoie l'identifiant, le résumé et le contenu du commentaire champs de tous workItem éléments. Mais il montrera seulement les commentaires qui ont été créés par Bob Sacremento. Je voudrais faire quelque chose de similaire avec mon API. Avant que j'écrive mes propres contrôleurs pour le faire, j'ai pensé que je demanderais s'il y a un cadre qui fournit cette fonctionnalité hors de la boîte. Il semble que Spring Data REST ne le fasse pas.

Répondre

1

Vous pouvez utiliser Spring données REST pour définir connues projections, ce qui peut être utilisé pour créer des points d'extrémité qui exposent des projections spécifiques sur vos modèles sous-jacents et/ou pour permettre invocateurs de demander des projections connues (pré définies) via l'URI par exemple foo/bar/bas?projection=summary.

Plus de détails dans le Spring Data REST docs.

Cependant, je ne suis pas au courant d'une bibliothèque qui s'intégrera à Spring Data REST, JPA et permettra aux appelants de spécifier des projections (sous la forme d'une instruction SQL-esque SELECT par exemple) puis appliquer ces projections sur le voler en votre nom.

Je suppose que vous devrez définir un paramètre de requête tel que select=a,b,c dans vos contrôleurs, puis utiliser la valeur fournie pour appliquer une projection via Spring Data JPA.