Ho il seguente repository REST, la cui implementazione viene generata in fase di esecuzione da Spring.Spring Data REST: sovrascrive il metodo di repository sul controller
@RepositoryRestResource
public interface FooRepository extends CrudRepository<Foo, Long> {
}
Questo significa che avrò save(), find(), esiste() e altri metodi disponibili ed esposti tramite REST.
Ora, desidero sovrascrivere uno dei metodi; ad esempio, save(). Per questo, vorrei creare un controller di esporre tale metodo, in questo modo:
@RepositoryRestController
@RequestMapping("/foo")
public class FooController {
@Autowired
FooService fooService;
@RequestMapping(value = "/{fooId}", method = RequestMethod.PUT)
public void updateFoo(@PathVariable Long fooId) {
fooService.updateProperly(fooId);
}
}
Il problema: Se abilito questo controller, poi tutti gli altri metodi implementati entro la primavera non sono esposti più. Così, per esempio, non posso più fare una richiesta GET a/foo/1
Domanda: C'è un modo di rilevante metodi REST pur mantenendo gli altri metodi di primavera generate automaticamente?
Info extra:
Questa domanda sembra molto simile: Spring Data Rest: Override Method in RestController with same request-mapping-path ... ma io non voglio cambiare il percorso a qualcosa come/foo/1/salvare
Ho pensato di usare @RepositoryEventHandler ma non mi piace molto quell'idea perché vorrei incapsularla sotto un servizio. Inoltre, sembri perdere il controllo del contesto della transazione.
This part of the Spring Data documentation dice il seguente:
A volte si può decidere di scrivere un gestore personalizzato per una specifica risorsa . Per usufruire di impostazioni di primavera dati REST, messaggio convertitori, gestione delle eccezioni, e di più, usare l'annotazione @RepositoryRestController al posto di uno standard di Spring MVC @Controller o @RestController
così sembra che dovrebbe funzionare fuori dagli schemi, ma sfortunatamente no.
http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/#repositories.single-repository-behaviour Questo forse ti aiuto? – Tarmo
Mi rendo conto che questa domanda non è una domanda di Grails, ma il concetto è simile alla domanda/risposta qui descritta: http://stackoverflow.com/questions/19360559/adding-functionality-to-grails-restfulcontroller – rmlan
@Tarmo : Anche se penso che possa funzionare, mi costringerebbe a continuare ad aggiungere logica in un repository, e preferisco tenerlo in un servizio. – Nicolas