MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie stelle ich eine neue REST-Methode über ein Spring Data MongoDB-Repository mit ALPS/HATEOAS-Metadaten bereit?

tl;dr

Es werden benutzerdefinierte Implementierungen für das Repository und den Controller benötigt.

Einzelheiten

Wir müssen aufpassen, dass wir uns nicht in all den verschiedenen Aspekten verlieren, die Sie hier ansprechen. Ich werde versuchen, die Äste von unten nach oben zu entwirren:

Ausführen von MongoDB-Skripten

Als Referenzdokumentation zum Ausführen von Skripten mit MongoDB Staaten (und Sie haben es bereits entdeckt), wird die Funktionalität by MongoTemplate bereitgestellt 's ScriptOperations . Daher sollte klar sein, wie diese API verwendet wird. Weitere Informationen finden Sie im Javadoc.

Skripte über Spring Data-Repositories ausführen

Das nächste, wonach Sie fragen, ist die Ausführung dieser Skripts durch die Repository-Abstraktion. Um das Baby hier nicht mit dem Bade auszuschütten, stellen Sie sicher, dass wir den Zweck eines Repositorys verstehen:Es simuliert eine Sammlung von Aggregatwurzeln und den Zugriff darauf ohne den zugrunde liegenden Persistenzmechanismus preiszugeben . Verfügbarmachen von Typen wie ExecutableMongoScript auf dem Repository würde die letztere Eigenschaft brechen. Daher besteht der richtige Ansatz hier darin, eine benutzerdefinierte Implementierung für diese bestimmte Funktionalität zu erstellen, wie in Referenzdokumentation zu Spring Data-Repositories .

Die Funktionalität über REST verfügbar machen

Ich gehe davon aus, dass Sie sich auf die Funktion von Spring Data REST beziehen, um eine dedizierte Ressource für die Repository-Abfragemethode in Ihrer Frage bereitzustellen. Spring Data REST macht derzeit nur deklarative Abfragemethoden automatisch verfügbar, hauptsächlich aus dem Grund, dass es schwierig ist, über die richtige HTTP-Methode zur Unterstützung benutzerdefinierter Implementierungen nachzudenken, da wir nicht erraten können, was innerhalb der Methode passiert.

Die empfohlene Methode zum Verfügbarmachen benutzerdefinierter Repository-Abfragemethoden mithilfe eines benutzerdefinierten Controllers mit einem @RequestMapping passend zu Ihrem Zweck, Aufruf des Repositorys und Verwendung eines PersistentEntityResourceAssembler injizierbar in die Handler-Methode, um eine PersistentEntityResource zu erzeugen zurück.