web-dev-qa-db-ja.com

RepositoryRestResourceアノテーションを使用してRESTfulエンドポイントを変更しない

春のブーツは初めてです。 MongoDBにもプラグインするRESTful Webサービスを作成しようとしていました。ガイドがこれを除いて説明するように、すべてが正常に機能します。

package hello.requests;

import Java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

import hello.models.CustomerModel;

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

    List<CustomerModel> findByLastName(@Param("name") String name);

}

ここでは、リポジトリのRESTfulエンドポイントをデフォルトから変更しようとしています/customerModelsから/people。しかし、これを実行すると、/peopleですが、/customerModels。広い意味では、@RepositoryRestResource仕事?ここで何が悪いのですか?

17
Codevalley

path属性内でスラッシュを使用することはできませんが、ベースパスを application.properties で設定できます。

# DATA REST (RepositoryRestProperties)
spring.data.rest.base-path=/my/base/uri
# Base path to be used by Spring Data REST to expose repository resources.
7
kinjelom

構成全体を確認しないと、状況で何が起こっているのかを正確に知ることは困難です。ただし、最新のガイドを https://github.com/spring-guides/gs-accessing-data-mongodb.git で使用すると、次の変更を加えることで機能させることができます。

  • POMファイルの依存関係としてspring-boot-starter-data-restを追加します。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    
  • この注釈をCustomerRepositoryクラスに追加します。

    @RepositoryRestResource(path = "people")
    
  • Jacksonシリアル化エラーを回避するために、コンストラクターの2つの名前フィールドのCustomerクラスでゲッターとセッターを設定します。

アプリケーションを実行するときにこれを使用すると、リポジトリにアクセスできます http:// localhost:8080/people 。アノテーションを削除すると、CustomerRepositoryは http:// localhost:8080/customers でアクセスされます。 GitHubにフォークを投稿したい場合はお知らせください。

RepositoryRestResourceとは何かについての質問に答えるために、デフォルトで作成される ResourceMapping の属性をオーバーライドします。その属性はマッピングの作成に使用され、マッピングクラスのメソッドの関連する戻り値を変更します。デフォルトでは、Spring Data Restは、リポジトリー定義で使用されるオブジェクトのクラス名に基づいてデフォルトを作成します。

6
Rob Baily

デフォルトのメソッドはCustomerModelのリストを返すため、デフォルトで_/customerModels_が生成されます。したがって、この@RestResource(path = "names")をメソッドに追加してから、_http://localhost:8080/yourapp/people/search/names_のようにアクセスすることができます。ここを見て: Spring data docs

3
ACV