春のブーツは初めてです。 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
仕事?ここで何が悪いのですか?
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.
構成全体を確認しないと、状況で何が起こっているのかを正確に知ることは困難です。ただし、最新のガイドを 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は、リポジトリー定義で使用されるオブジェクトのクラス名に基づいてデフォルトを作成します。
デフォルトのメソッドはCustomerModel
のリストを返すため、デフォルトで_/customerModels
_が生成されます。したがって、この@RestResource(path = "names")
をメソッドに追加してから、_http://localhost:8080/yourapp/people/search/names
_のようにアクセスすることができます。ここを見て: Spring data docs