MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como faço para expor um novo método REST por meio de um repositório Spring Data MongoDB com metadados ALPS/HATEOAS?

tl;dr


Ele precisará de implementações personalizadas para o repositório e o controlador.

Detalhes


Temos que ter certeza de que não estamos nos perdendo em todos os diferentes aspectos que você está mencionando aqui. Vou tentar desembaraçar os galhos de baixo para cima:

Executando scripts do MongoDB


Como o documentação de referência sobre a execução de scripts com o MongoDB estados (e você já descobriu), a funcionalidade é fornecida by MongoTemplate 's ScriptOperations . Assim, como usar essa API deve ser claro. Consulte o Javadoc para obter mais informações.

Executando scripts por meio de repositórios Spring Data


A próxima coisa que você está pedindo é executar esses scripts por meio da abstração do repositório. Para não jogar o bebê com a água do banho aqui, certifique-se de que entendemos o propósito de um repositório:ele simula uma coleção de raízes agregadas e o acesso a ela sem expor o mecanismo de persistência subjacente . Expondo tipos como ExecutableMongoScript no repositório quebraria o último traço. Portanto, a abordagem correta aqui é criar uma implementação personalizada para essa funcionalidade específica, conforme descrito no documentação de referência sobre repositórios Spring Data .

Expondo a funcionalidade via REST


Estou assumindo que você está se referindo ao recurso Spring Data REST para expor um recurso dedicado para o método de consulta do repositório em sua pergunta. O Spring Data REST atualmente só expõe métodos de consulta declarativa automaticamente, principalmente porque é difícil raciocinar sobre o método HTTP correto para suportar implementações personalizadas, pois não podemos adivinhar o que está acontecendo dentro do método.

A maneira recomendada de expor métodos de consulta de repositório personalizados usando um controlador personalizado com um @RequestMapping adequando ao seu propósito, chamando o repositório e usando um PersistentEntityResourceAssembler injetável no método do manipulador para produzir um PersistentEntityResource para retornar.