ネストされたエンティティを公開する投影を作成しました。
@Projection(name = "inlineBusiness", types = { UserModel.class })
public interface InlineBusinessUserModelProjection {
String getUsername();
String getFirstName();
String getLastName();
Date getBirthdate();
String getEmail();
BusinessModel getBusiness();
}
そしてサービスリポジトリ:
@RepositoryRestResource(collectionResourceRel = "users", path = "users",
excerptProjection = InlineBusinessUserModelProjection.class)
public interface UserRepository extends BaseDAO<UserModel> {..}
/users
の場合、正常に機能し、ビジネスフィールドはネストされたエンティティで公開されますが、/users/1
-を呼び出すと、すべてのカスタムメソッドも含まれません。プロジェクションは、 /users
何かアイデアはありますか?
それは設計どおりに機能します。 __embedded
_句内でターゲットタイプ(この場合はUserModel
)のインスタンスが使用される場合は常に、抜粋プロジェクションが使用されます。したがって、抜粋は、リソース自体がレンダリングされていないがポイントされているすべての場所で使用されるある種のプレビューです。これは通常、コレクションリソースまたはアソシエーションの場合です。
アイテムリソースでデフォルトで抜粋プロジェクションを使用することは、別の観点からは実際には意味がありません。抜粋プロジェクションは、一部のドメインオブジェクトでの読み取り専用ビューです。デフォルトでアイテムリソースのビューを返す場合、クライアントはリソースを更新するために送信する必要のあるデータをどのように知ることができますか。抜粋プロジェクション用に作成されたJSONドキュメントは、定義上、単純に取得、変更、およびリソースを更新するためのPUT
リクエストの送信に使用することはできません。
アイテムリソースにプロジェクションを適用する場合は、projection
URIテンプレート変数にプロジェクションの名前を入力します。
編集:手動で投影を選択しても投影が適用されない場合は、InlineBusinessUserModelProjection
が実際に一般的な使用のために登録されていることを確認してください。 タイプがUserModel
とまったく同じパッケージまたはサブパッケージにあることを確認してください。または、RepositoryRestConfiguration.projectionConfiguration().addProjection(…)
。手動構成では、廃止されたプロジェクションタイプで_@Projection
_を使用します。
このトピックの詳細については、 Spring Data RESTリファレンスドキュメント 。