[〜#〜] rest [〜#〜]でSpringを使用する方法のさまざまな例を見てきました。最終ターゲットはSpring HATEOAS/HAL
セットアップ
[〜#〜] rest [〜#〜] within Spring
経由@RestController
コントローラー内
経由@RepositoryRestResource
リポジトリ内
私が見つけるのに苦労しているのは、なぜあなたが一方をもう一方の上に使うのかということです。 HAL
を実装しようとすると、どちらが最適ですか?
データベースのバックエンドはNeo4jです。
わかりましたので、短い話は_@RepositoryRestResource
_を使用したいということです。これは[〜#〜] hateoas [〜#〜]サービスをSpring JPA。
here このアノテーションを追加してPojoにリンクすると、完全に機能する[〜#〜] hateoas [〜#〜]サービスが表示されますリポジトリメソッドまたはRESTサービスメソッドを実装する必要なし
_@RestController
_を追加する場合、公開したい各メソッドを独自に実装する必要があり、これを[〜#〜] hateoas [〜#〜にエクスポートしません] フォーマット。
まだ説明していない3番目(および4番目)のオプションがあります。これは、エンティティ固有のアクションを実行しているかどうかに応じて、@ BasePathAwareControllerまたは@RepositoryRestControllerを使用します。
@RepositoryRestResourceは、公開リポジトリインターフェースでオプションを設定するために使用されます-拡張されるリポジトリのタイプ(つまり、CrudRepository/PagingAndSortingRepository/etc)に基づいて、必要に応じてエンドポイントが自動的に作成されます。
@BasePathAwareControllerと@RepositoryRestControllerは、エンドポイントを手動で作成したいが、設定したSpring Data REST設定を使用したい場合に使用します。
@RestControllerを使用する場合、different構成オプション(つまり、異なるメッセージコンバーター、異なるエラーハンドラーなど)を使用して、エンドポイントの並列セットを作成しますが、彼らは喜んで共存します(そしておそらく混乱を引き起こします)。
特定のドキュメントは here にあります。
さて、上記の答えはその文脈において正しいですが、私はあなたに実際的な例を与えています。
APIの一部としての多くのシナリオでは、特定の基準に基づいてエンティティを検索するためのエンドポイントを提供する必要があります。 JPAを使用すると、クエリを作成する必要さえなく、Spring-JPAの特定の命名法でインターフェイスとメソッドを作成するだけです。このようなAPIを公開するには、これらのリポジトリメソッドを呼び出すサービスレイヤーを作成し、最後にサービスレイヤーを呼び出すことでエンドポイントを公開するコントローラーを作成します。
ここでSpringが行ったことにより、これらのエンドポイントを、通常は検索エンティティへのGET呼び出しであるインターフェイス(リポジトリ)から公開し、バックグラウンドで必要なファイルを生成して最終エンドポイントを作成できます。したがって、@ RepositoryRestResourceを使用している場合、サービス/コントローラーレイヤーを作成する必要はありません。
一方、@ RestControllerはjsonデータを処理するコントローラーであり、残りはコントローラーとして機能します。要するに@Controller + @ResponseBody = @RestControllerです。
お役に立てれば。
同じことについては、私の実例とブログを参照してください。
http://sv-technical.blogspot.com/2015/11/spring-boot-and-repositoryrestresource.html
https://github.com/svermaji/Spring-boot-with-hibernate-no-controller
_@RepositoryRestController
_は、公開されたリポジトリからデフォルトで生成されたSpring Data RESTコントローラをオーバーライドします。
Spring Data RESTの設定、メッセージコンバーター、例外処理などを活用するには、標準のSpring MVC _
@RepositoryRestController
_または_@Controller
_の代わりに_@RestController
_注釈を使用します
たとえば、このコントローラーは_spring.data.rest.basePath
_ Spring Boot設定をルーティングのベースパスとして使用します。
SpringデータのオーバーライドREST応答ハンドラー を参照してください。
_@ResponseBody
_が欠落しているため、_@RepositoryRestController
_を追加することに注意してください
リポジトリを公開していない場合(@RepositoryRestResource(exported = false)
としてマーク)、代わりに_@BasePathAwareController
_注釈を使用します
バッグにも注意してください
ControllerLinkBuilder
はSpring Data RESTのベースパスを考慮せず、_@RequestMapping
_はクラス/タイプレベルで使用しないでください
そして
リンクを修正する回避策: https://stackoverflow.com/a/51736503/54847
更新:最後に、多くの回避策のために_@RepositoryRestController
_を使用しないことを好みます。