MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come posso esporre un nuovo metodo REST tramite un repository Spring Data MongoDB con metadati ALPS/HATEOAS?

tl;dr

Avrà bisogno di implementazioni personalizzate per il repository e il controller.

Dettagli

Dobbiamo assicurarci di non perderci in tutti i diversi aspetti che stai menzionando qui. Proverò a districare i rami dal basso:

Esecuzione di script MongoDB

Come documentazione di riferimento sull'esecuzione di script con MongoDB afferma (e l'hai già scoperto), la funzionalità è fornita da by MongoTemplate ScriptOperations di . Quindi come utilizzare quell'API dovrebbe essere chiaro. Consulta il Javadoc per maggiori informazioni.

Esecuzione di script tramite i repository Spring Data

La prossima cosa che stai chiedendo è l'esecuzione di quegli script attraverso l'astrazione del repository. Per non gettare qui il bambino con l'acqua del bagnetto, assicurati di aver compreso lo scopo di un deposito:simula una raccolta di radici aggregate e l'accesso ad esso senza esporre il meccanismo di persistenza sottostante . Esporre tipi come ExecutableMongoScript sul repository interromperebbe quest'ultimo tratto. Quindi l'approccio corretto qui è creare un'implementazione personalizzata per quella particolare funzionalità come descritto in documentazione di riferimento sui repository Spring Data .

Esposizione della funzionalità tramite REST

Presumo che ti riferisci alla funzione di Spring Data REST per esporre una risorsa dedicata per il metodo di query del repository nella tua domanda. Spring Data REST attualmente espone automaticamente solo metodi di query dichiarativi, principalmente per il motivo che è difficile ragionare sul metodo HTTP corretto da supportare per implementazioni personalizzate poiché non possiamo indovinare cosa sta succedendo all'interno del metodo.

Il modo consigliato per esporre metodi di query del repository personalizzati utilizzando un controller personalizzato con un @RequestMapping adatto al tuo scopo, chiamando il repository e usando un PersistentEntityResourceAssembler iniettabile nel metodo del gestore per produrre un PersistentEntityResource per tornare.