8

Я хотел бы предоставить новые конечные точки для моего репозитория, который также расширяет RevisionRepository.Spring Data Rest: выставлять новые конечные точки для репозитория, который расширяет репозиторий репозитория

@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); 
} 

Мой вопрос прямо сейчас, это то, что эти новые методы не подвергаются, как URLs (findLastChangeRevision, findRevisions) и только findByName находится под URL поиска. В настоящее время я не особо отношусь к фактической форме URL-адреса, если это работает.

Единственный вариант, я знаю, сейчас это

  1. отделяющих ревизионные репозитории
  2. Создать новый контроллер, который отображается «/», чтобы заменить один созданный Spring Data Rest, и добавить все ссылки репозитория вручную. Одна из моих проблем заключается в том, что мои ссылки будут жестко закодированы (в отличие от ссылок на контроллеры), а пути будут относительными - не обязательно плохими, но сделают все непоследовательным.
  3. Добавьте ссылки на «/», который отображает до ревизии хранилищ

У меня есть много оговорок, с моей опцией выше. Я не уверен, как действовать дальше.

+0

Я также заинтересован в ответе на этот вопрос. Я столкнулся с аналогичной проблемой, где я хочу расширить API-интерфейсы CrudRepository –

ответ

0

Вы ошиблись в именах методов. Найти методы в Repository класса должны быть findByxxxxxx не findxxxxx

Это, кажется, проблема с вашим кодом.

@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

. Я думаю, что проблема заключается в том, что '' findLastChangeRevision'', '' findRevisions'' и '' findRevisions'' являются методами, открытыми RevisionRepository – Chad

+0

Вам нужно добавить пользовательское действие контроллера, чтобы выставить envers –