2014-09-19 12 views
8

Vorrei esporre nuovi endpoint per il mio repository che estende anche RevisionRepository.Spring Data Rest: Esporre nuovi endpoint per repository che estendono Repository di revisione

@RepositoryRestResource(collectionResourceRel = "persons", itemResourceRel = "person", path = "persons") 
public interface PersonRepository extends PagingAndSortingRepository<PersonEntity, Long>, RevisionRepository<PersonEntity, Long, Integer> { 

    Revision<Integer, PersonEntity> findLastChangeRevision(@Param("id") Long id); 

    Revisions<Integer, PersonEntity> findRevisions(@Param("id") Long id); 

    Page<Revision<Integer, PersonEntity>> findRevisions(@Param("id") Long id, Pageable pageable); 

    PersonEntity findByName(@Param("name") String name); 
} 

Il mio problema in questo momento, è che questi nuovi metodi non sono esposti come URL (findLastChangeRevision, findRevisions) e solo findByName è sotto l'URL di ricerca. Al momento non sono molto particolare riguardo alla forma dell'URL, a condizione che funzioni.

L'unica opzione che so in questo momento è quello di

  1. separati repository la revisione
  2. Creare un nuovo controller che mappa a "/", in sostituzione di quello creato da primavera dati Riposo, e aggiungere tutti il repository si collega manualmente. Uno dei miei problemi qui è che i miei link saranno hardcoded (a differenza del collegamento a Controller), e i percorsi saranno relativi - non necessariamente negativi, ma renderanno tutto incoerente.
  3. aggiungere collegamenti a "/" che associa ai repository di revisione

ho un sacco di prenotazioni con la mia scelta di cui sopra. Non sono sicuro di come procedere.

+0

Sono anche interessato alla risposta a questa domanda. Mi sono imbattuto in un problema simile in cui voglio estendere le API del CrudRepository –

risposta

0

Hai commesso un errore nei nomi dei metodi. Trova metodi nella classe repository dovrebbe essere findByxxxxxx nonfindxxxxx

Questo sembra essere il problema con il vostro codice.

@RepositoryRestResource(collectionResourceRel = "persons", itemResourceRel = "person", path = "persons") 
public interface PersonRepository extends PagingAndSortingRepository<PersonEntity, Long>, RevisionRepository<PersonEntity, Long, Integer> { 

    Revision<Integer, PersonEntity> findByLastChangeRevision(@Param("id") Long id); 

    Revisions<Integer, PersonEntity> findByRevisions(@Param("id") Long id); 

    Page<Revision<Integer, PersonEntity>> findByRevisions(@Param("id") Long id, Pageable pageable); 

    PersonEntity findByName(@Param("name") String name); 
} 
+0

Penso che il problema sia "findLastChangeRevision'',' 'findRevisions'' e' 'findRevisions'' sono metodi esposti da RevisionRepository – Chad

+0

È necessario aggiungere un'azione del controller personalizzata per esporre envers –

Problemi correlati