2015-03-20 12 views
19

Używam wiosna-data-resztę i mam MongoRepository takiego:Jak zapobiec eksportowaniu niektórych metod HTTP z mojego MongoRepository?

@RepositoryRestResource 
interface MyEntityRepository extends MongoRepository<MyEntity, String> { 
} 

chciałbym, aby umożliwić metody GET ale wyłącz PUT, POST, plaster i DELETE (tylko do odczytu serwis WWW).

Według http://docs.spring.io/spring-data/rest/docs/2.2.2.RELEASE/reference/html/#repository-resources.collection-resource powinienem być w stanie to zrobić tak:

@RepositoryRestResource 
interface MyEntityRepository extends MongoRepository<MyEntity, String> { 

    @Override 
    @RestResource(exported = false) 
    public MyEntity save(MyEntity s); 

    @Override 
    @RestResource(exported = false) 
    public void delete(String id); 

    @Override 
    @RestResource(exported = false) 
    public void delete(MyEntity t); 
} 

To nie wydają się działać jak mogę jeszcze zrobić PUT, POST, łata i DELETE żądań.

+1

To powinno działać, można podać przypadek testowy projekt/test, który pokazuje ten rygorem? –

+0

Po testach ponownie dzisiaj, to faktycznie działa. Jednak nie mogę znaleźć sposobu ograniczenia metody GET na/myEntities. Dodawanie adnotacji do 'Listy findAll();' nic nie robi. – avandecreme

+2

'MongoRepository' rozszerza' PagingAndSortingRepository', więc musisz redeclare i adnotować 'findAll (Pageable pageable)'. –

Odpowiedz

33

Dzięki Oliver, oto sposoby, aby zastąpić:

@RepositoryRestResource(collectionResourceRel = "people", path = "people") 
public interface PersonRepository extends MongoRepository<Person, String> { 

    // Prevents GET /people/:id 
    @Override 
    @RestResource(exported = false) 
    public Person findOne(String id); 

    // Prevents GET /people 
    @Override 
    @RestResource(exported = false) 
    public Page<Person> findAll(Pageable pageable); 

    // Prevents POST /people and PATCH /people/:id 
    @Override 
    @RestResource(exported = false) 
    public Person save(Person s); 

    // Prevents DELETE /people/:id 
    @Override 
    @RestResource(exported = false) 
    public void delete(Person t); 

} 
+0

Czy mogę wyłączyć put? Chcę, aby wszystkie nowe jednostki były tworzone za pomocą POST – Laures

+0

Możesz próbować nanieść adnotację 'public Person insert (Person entity)', ale wątpię, by to działało. – avandecreme

Powiązane problemy