web-dev-qa-db-ja.com

一部のHTTPメソッドがMongoRepositoryからエクスポートされないようにするにはどうすればよいですか?

私はspring-data-restを使用しており、次のようなMongoRepositoryを持っています:

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

GETメソッドは許可したいが、PUT、POST、PATCH、DELETE(読み取り専用Webサービス)を無効にしたい。

http://docs.spring.io/spring-data/rest/docs/2.2.2.RELEASE/reference/html/#repository-resources.collection-resource によると、私はできるはずです次のようにします。

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

PUT、POST、PATCH、およびDELETE要求を実行できるため、機能しないようです。

25
avandecreme

Oliverのおかげで、オーバーライドするメソッドは次のとおりです。

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

}
38
avandecreme

これは返信が遅いですが、エンティティのグローバルhttpメソッドを回避する必要がある場合は、それを試してください。

@Configuration
public class DataRestConfig implements RepositoryRestConfigurer {
    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
         config.getExposureConfiguration()
                .forDomainType(Person.class)
                .withItemExposure(((metdata, httpMethods) -> httpMethods.disable(HttpMethod.PUT, HttpMethod.POST, ... )))
                .withCollectionExposure((metdata, httpMethods) -> httpMethods.disable(HttpMethod.PUT, HttpMethod.POST, ...));
    }
}
6
윤현구

こんな風に使ってみませんか?

@Configuration
public class SpringDataRestConfiguration implements RepositoryRestConfigurer {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration restConfig) {
        restConfig.disableDefaultExposure();
    }
}
0