Ich verwende einen ResourceProcessor, um zusätzliche Links zu meinem Ressourcenobjekt hinzuzufügen, wenn sie in einer Sammlung aufgelistet oder einzeln abgerufen werden. Wenn ich jedoch eine Projektion (oder ein Auszugsprojekt) auf mein Repository anwende, wird der ResourceProcessor nicht ausgeführt und somit werden meine Links für diese Ressource nicht erstellt. Gibt es eine Möglichkeit, meine benutzerdefinierten Ressourcenverknüpfungen zu einer Ressource hinzuzufügen, unabhängig davon, wie der Ressourceninhalt projiziert wird?Spring Data Rest ResourceProcessor nicht auf Projektionen angewendet
Antwort
Ich denke, das Problem Ihren Fall beschreibt: https://jira.spring.io/browse/DATAREST-713
Derzeit Feder-data-Rest keine Funktionalität bieten, Ihr Problem zu lösen.
Wir verwenden ein wenig Abhilfe, die immer noch einen separaten ResourceProcessor
für jede Projektion benötigt, aber wir müssen nicht die Verknüpfungslogik duplizieren:
Wir haben eine Basisklasse haben die in der Lage ist, den zugrunde liegenden Entity für eine Projektion zu erhalten und ruft die Entität ResourceProcessor
auf und wendet die Links auf die Projektion an. Entity
ist eine gemeinsame Schnittstelle für alle unsere JPA-Entitäten - aber ich denke, Sie könnten auch org.springframework.data.domain.Persistable
oder org.springframework.hateoas.Identifiable
verwenden.
/**
* 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;
}
}
Eine Implementierung eines solchen Ressourcen Prozessor würde wie folgt aussehen:
@Component
public class MyProjectionResourceProcessor extends ProjectionResourceProcessor<MyEntity, MyProjection> {
@Autowired
public MyProjectionResourceProcessor(EntityResourceProcessor resourceProcessor) {
super(resourceProcessor);
}
}
Die Implementierung selbst geht nur die ResourceProcessor, der die Entity-Klasse verarbeiten kann und übergibt sie an unsere ProjectionResourceProcessor
. Es enthält keine Linkerstellungslogik.
- 1. Wie werden Spring Data-Projektionen in Spring-MVC-Controllern angewendet?
- 2. Spring Data Rest: ResourceProcessor-Konfiguration funktioniert nicht richtig
- 3. Wie fügt man Links zu Spring Data REST Projektionen hinzu?
- 4. Nested Projektionen in Spring Data Mit REST
- 5. Spring Data Erholung ResourceProcessor für Projection Ausnahme
- 6. Spring Data Rest Ressourcenverarbeitungsfehler
- 7. Spring Data Rest-Suchendpunkt
- 8. Spring-Data-Rest Validator
- 9. Spring Data REST Controller unter konfigurierten Basispfad
- 10. Spring Data Erholung benutzerdefinierte Links auf Ressourcen
- 11. Spring Data Rest JPA - Lazy laden OneToMany bidirektionale Beziehung nicht
- 12. Spring Data Rest Repository nicht gefunden
- 13. Spring Data Rest: Sicherheit durch Projektion
- 14. Spring Data Rest und Cors
- 15. Spring Data Rest @HandleBeforeCreate-Methode heißt nicht
- 16. Spring Data REST: Projektionsdarstellung der einzelnen Ressource
- 17. Spring Data Rest Projektion Sortierung
- 18. Spring Boot und Spring Data Rest
- 19. Spring Data REST: langsame Seitenzusammenfassung
- 20. Warum wird eine Auszugsprojektion nicht automatisch für eine Spring Data REST-Artikelressource angewendet?
- 21. Sicherheitskontext in Bezug auf QueryDslPredicateExecutor und Spring Data Rest
- 22. Spring Data REST: benutzerdefinierte Methoden Validierung
- 23. Spring Data Rest Bildbare Child Collection
- 24. Spring Data Rest - Benutzerdefinierte Json Schema/Alpen?
- 25. beste Weg Kind Ressource Spring Data REST
- 26. Anpassen von Endpunkten mit Spring Data REST
- 27. Spring Data Rest - Link zum Suchendpunkt hinzufügen
- 28. Spring Data REST: NULL Werte Problem
- 29. Wie @EmbeddedId Wandler in Spring Data REST
- 30. Spring Data Rest und java.time Serialisierung