Ich verwende spring-data-rest mit JpaRepository
, um die Rest-Endpoints zu erstellen. Standardmäßig ist Paging für alle JpaRepository
aktiviert, was eine gute Sache ist. Aber ich habe eine Legacy-Anwendung, die wir auf unseren neuen Stack portieren, der kein Paging unterstützt. Ich möchte das Paging abhängig von einem URL-Parameter deaktivieren, um immer noch Paging im neuen Anwendungscode verwenden zu können.
Ich habe verschiedene Ansätze ausprobiert, um die Ressourcen mit und ohne Paging freizulegen:
CrudRepository
: Die Ergebnisse haben nur einen nicht ausgelagerten Endpunkt und die Methode flush
fehlt. List<T> findAll()
in meiner Repository-Oberfläche und notiere sie mit RestResource
. Ich hätte erwartet, dass die Methode als Suchmethode zur Verfügung gestellt wird, ist es aber nicht. Page<T> findAll(Pageable pageable)
mit @RestResource(exported=false)
und annotate List<T> findAll()
wie im vorherigen Geschoss. Ich habe gehüpft, dass dies die Standardmethode ersetzt. Dies ist jedoch keine gültige Lösung, da nur ein nicht ausgelagerter Endpunkt verfügbar ist. size=-1
, um ein unbegrenztes Ergebnis zu erhalten - & gt; Standard-Paging-Größe wird verwendet Ich habe gesehen, dass der Spring-Controller RepositoryEntityController
einen RepositoryInvoker
verwendet, um die Methoden im Repository aufzurufen. Das Pageable
wird mit PageableHandlerMethodArgumentResolver
aufgelöst, das immer ein seitenfähiges Objekt zurückgibt (in der Abfrage angegeben, mit Anmerkungen versehen oder standardmäßig umgebrochen).
Die einzige Lösung, die ich im Moment sehe, ist die Implementierung einer benutzerdefinierten PageableHandlerMethodArgumentResolver
, die null zurückgibt, wenn ein benutzerdefinierter URL-Parameter übergeben wird.
Kennen Sie weitere Lösungen oder ist für die Zukunft etwas Ähnliches geplant?
Danke, Micha
Ich verwende PagingAndSortingRepository und diese Konfiguration, um meinen pageableResolver zu setzen:
%Vor%Siehe: Ссылка
Auf diese Weise erhalten Sie, wenn Seite und Größe in der Anfrage enthalten sind, die angeforderte Seite, aber wenn sie nicht in der Anfrage enthalten sind, erhalten Sie alle Datensätze. In beiden Fällen wird eine Sortierung verwendet, um die Daten zu sortieren. Im zweiten Fall werden die Datensätze innerhalb einer Seite zurückgegeben, aber ich kann damit leben.
BEARBEITEN
Ссылка wurde korrigiert, so dass Sie mit den neuen Versionen Ihren Resolver mit null
konfigurieren können FallbackPageable. Wenn auslagerungsfähige Daten (zB page
und size
) vorhanden sind, rufen Sie auf diese Weise eine Seite ab, aber wenn Sie nicht alle Datensätze abrufen,
Sie können der Repository-Oberfläche eigene Methoden hinzufügen und den Rückgabetyp List<DomainObject>
oder Collection<DomainObject>
und keinen Pageable
-Parameter verwenden. Dadurch wird eine nicht ausgelagerte Antwort verwendet. Sie können dann Ihren Legacy-Client auf diese Methoden anstatt auf die Standardmethoden verweisen.
Oder Sie können die Standardseitengröße so konfigurieren, dass sie sehr groß ist. Setze spring.data.rest.default-page-size
in application.properties
.
Tags und Links paging spring-data-rest