So deaktivieren Sie das Paging für JpaRepository im Frühling-Daten-Rest

9

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:

  • Verwenden Sie CrudRepository : Die Ergebnisse haben nur einen nicht ausgelagerten Endpunkt und die Methode flush fehlt.
  • Überschreibe die Methode 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.
  • Annotate 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.
  • Übergeben Sie 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

    
Micha Reiser 13.07.2015, 09:36
quelle

2 Antworten

4

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,

%Vor%     
Triqui 28.10.2016 19:02
quelle
2

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 .

    
Marc Zampetti 13.07.2015 19:21
quelle

Tags und Links