2016-08-08 59 views
0

Controller:Frühling Paginierung funktioniert nicht

@RestController 
@RequestMapping("/api") 
public class TestResource { 

    @RequestMapping(value="/test", 
     method = RequestMethod.GET, 
     produces = MediaType.APPLICATION_JSON_VALUE) 
    public ResponseEntity<List<Integer>> test(Pageable pageable) { 
     List<Integer> init = new ArrayList<>(Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9,10})); 
     return ResponseEntity.ok(new PageImpl<>(init, pageable, init.size()).getContent()); 
    } 
} 

Anfrage /api/Testseite = 1 & size = 2 kehrt gesamte init Liste (von 1 bis 10?).
Aus Protokolle:

eingeben: com.test.rest.TestResource.test() mit dem Argument [s] = [Seite Anfrage [Nummer: 1, Größe 2, sort: null]]

Wie funktioniert es?

+1

@ downvoter, können Sie eine Erklärung Ihrer Stimme zur Verfügung stellen? – Feeco

Antwort

2

Wie ich verstanden, arbeitet Seite mit Repositories nur, so fand ich eine Lösung:

Verwenden org.springframework.beans.support.PagedListHolder

public ResponseEntity<List<Integer>> getIntegers(Pageable pageable) { 
    List<Integer> init = new ArrayList<>(Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9,10})); 
    PagedListHolder<Integer> holder = new PagedListHolder<>(init); 
    holder.setPage(pageable.getPageNumber()); 
    holder.setPageSize(pageable.getPageSize()); 
    return ResponseEntity.ok(holder.getPageList()); 
} 

Anfrage /api/Testseite =? 1 & size = 2 zurück [3,4]

0

Lassen Sie uns Ihre Anrufe brechen.

  1. neue PageImpl <> (init, seitenwechselbar, init.size()

PageImpl des Constructor

public PageImpl(List<T> content, Pageable pageable, long total) { 
    // PageImpl subclasses Chunk 
    super(content, pageable); 
    ... 
} 

Chunk des Constructor

public Chunk(List<T> content, Pageable pageable) { 
    Assert.notNull(content, "Content must not be null!"); 

    this.content.addAll(content); 
    this.pageable = pageable; 
} 
  1. PageImpl :: getContent()

PageImpl implementiert diese Methode nicht, aber Chunk tut.

public List<T> getContent() { 
    return Collections.unmodifiableList(content); 
} 

Zusammengefasst legen Sie den Wert des Inhalts, wenn Sie in init als Parameter an den Konstruktor übergeben. Wenn Sie getContent() aufgerufen haben, erhalten Sie mehr oder weniger genau das, was Sie ursprünglich eingegeben haben.

+0

Ist es eine Möglichkeit, Inhalte nach Params zu bekommen? – Feeco

+1

Nein. Das Page-Objekt ist effektiv ein Container für den Inhalt dieser Seite und die Paginierungsinformationen. Nehmen wir an, unser universeller Satz von Elementen ist {e1, e2, e3, e4, ..., e_n} mit einer Seitengröße von 2. Ein Beispiel für ein Seitenobjekt, p1, hätte den Inhalt = {e1, e2 } und hätte eine Umlagerungsfunktion mit zusätzlichen Informationen wie Seitenzahl = 1, Gesamtseitenzahl = n/2 usw. –