2015-03-20 6 views
19

sto usando la primavera-dati-riposo e ho una MongoRepository come questo:Come impedire l'esportazione di alcuni metodi HTTP dal mio MongoRepository?

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

vorrei permettere i metodi GET, ma disabilita PUT, POST, PATCH e DELETE (sola lettura servizio web).

Secondo http://docs.spring.io/spring-data/rest/docs/2.2.2.RELEASE/reference/html/#repository-resources.collection-resource dovrei essere in grado di farlo in questo modo:

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

Non sembra funzionare come posso ancora fare PUT, POST, PATCH e DELETE richieste.

+1

che dovrebbe funzionare, si può fornire un progetto/test case test che mostra questo fallimento? –

+0

Dopo aver provato di nuovo oggi, funziona davvero. Tuttavia, non riesco a trovare come limitare il metodo GET su/myEntities. Aggiunta dell'annotazione a 'Elenco findAll();' non fa nulla. – avandecreme

+2

'MongoRepository' estende' PagingAndSortingRepository' per cui è necessario ridichiarare e annotare 'findAll (Pageable pageable)'. –

risposta

33

Grazie a Oliver, qui sono i metodi per ignorare:

@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

posso disabilitare mettere? Voglio che tutte le nuove entità vengano create tramite POST – Laures

+0

Si potrebbe provare ad annotare 'public Person insert (Person entity)' ma dubito che funzionerebbe. – avandecreme