私は、ResourceProcessorを使用して、コレクションにリストされている、または個別にフェッチされたときに、リソースオブジェクトへのリンクを追加しています。しかし、リポジトリに投影(または抜粋プロジェクト)を適用すると、ResourceProcessorが実行されず、そのリソースのリンクが作成されません。リソースの内容がどのように投影されるかに関係なく、カスタムリソースリンクをリソースに追加できるようにする方法はありますか?SpringデータRest ResourceProcessorがプロジェクションに適用されていません
1
A
答えて
1
私は、この問題はあなたのケースを記述していると思う: https://jira.spring.io/browse/DATAREST-713
現在、春・データ-残りはあなたの問題を解決するための機能を提供していません。
我々はまだ各投影用の別々のResourceProcessor
を必要としますが、我々は、リンク・ロジックを複製する必要はありません少しの回避策を使用している:我々は、プロジェクション用の基礎となるエンティティを取得することができ、基本クラスを持っている
をエンティティのResourceProcessor
を呼び出し、そのリンクをProjectionに適用します。 Entity
はすべてのJPAエンティティの共通のインターフェイスですが、org.springframework.data.domain.Persistable
またはorg.springframework.hateoas.Identifiable
も使用できると思います。
/**
* Projections need their own resource processors in spring-data-rest.
* To avoid code duplication the ProjectionResourceProcessor delegates the link creation to
* the resource processor of the underlying entity.
* @param <E> entity type the projection is associated with
* @param <T> the resource type that this ResourceProcessor is for
*/
public class ProjectionResourceProcessor<E extends Entity, T> implements ResourceProcessor<Resource<T>> {
private final ResourceProcessor<Resource<E>> entityResourceProcessor;
public ProjectionResourceProcessor(ResourceProcessor<Resource<E>> entityResourceProcessor) {
this.entityResourceProcessor = entityResourceProcessor;
}
@SuppressWarnings("unchecked")
@Override
public Resource<T> process(Resource<T> resource) {
if (resource.getContent() instanceof TargetAware) {
TargetAware targetAware = (TargetAware) resource.getContent();
if (targetAware != null
&& targetAware.getTarget() != null
&& targetAware.getTarget() instanceof Entity) {
E target = (E) targetAware.getTarget();
resource.add(entityResourceProcessor.process(new Resource<>(target)).getLinks());
}
}
return resource;
}
}
なリソースプロセッサの実装は次のようになります。
@Component
public class MyProjectionResourceProcessor extends ProjectionResourceProcessor<MyEntity, MyProjection> {
@Autowired
public MyProjectionResourceProcessor(EntityResourceProcessor resourceProcessor) {
super(resourceProcessor);
}
}
実装自体は単なるエンティティクラスを扱うことができるResourceProcessorを通過して、私たちのProjectionResourceProcessor
に渡します。リンク作成ロジックは含まれていません。
関連する問題
- 1. Springデータの残り:ResourceProcessorの設定が正しく動作していません
- 2. Spring - メソッドの周りにトランザクションが適用されていません
- 3. Spring Restリクエストメソッド 'GET'はサポートされていません
- 4. タイプフェイスが適用されていませんエラーがスローされません
- 5. SpringのAsync Restメソッドが非同期に実行されていません
- 6. データはSpringブート+ SpringデータJPAに挿入されていませんか?
- 7. HTMLバインディングブロックにクラスが適用されていませんか?
- 8. CSSスタイルがAngularJSに適用されていませんHTML
- 9. SpringブートloginProcessingUrl RESTサービス405メソッドが許可されていません
- 10. Android 4.0 webviewにCSSローテーションが適用されていません
- 11. Angular JS Filterがng-repeatに適用されていません
- 12. Jのラベルにボールドが適用されていません
- 13. アングル2コンポーネントにブートストラップクラスが適用されていません
- 14. フォーマットがExcelシートに適用されていません
- 15. Nginxのlimit_rateがproxy_passに適用されていません
- 16. チェックインポリシーがTFS 2015に適用されていません
- 17. Angularjs - スコープの値がテンプレートに適用されていません
- 18. anglejsにApacheリライトルールが適用されていません
- 19. divに基本CSSが適用されていません
- 20. モバイルデバイスにfont-familyが適用されていません
- 21. ボーダーがdiv全体に適用されていませんか?
- 22. "Float:right"がサブミットボタンに適用されていません
- 23. Do-LoopにApplyBulletDefaultが適用されていません
- 24. friendly_id urlがページネーションに適用されていません。
- 25. JQuery UIテーマがHTMLに適用されていません
- 26. MaterialUIのSVGIconにスタイルが適用されていませんReact
- 27. CSSスタイルがAppBarに適用されていません
- 28. タグヘルパーに "asp-format"が適用されていません
- 29. 派生ページにAsp.netテーマが適用されていません
- 30. バリデータが子プロパティに適用されていません