春天分页不起作用

时间:2016-08-08 21:48:24

标签: spring spring-mvc spring-boot

控制器:

@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());
    }
}

请求 / api / test?page = 1&amp; size = 2 返回整个初始列表(从1到10)。
来自日志:

  

输入:com.test.rest.TestResource.test()with argument [s] = [Page request [number:1,size 2,sort:null]]

如何让它发挥作用?

2 个答案:

答案 0 :(得分:2)

据我了解,Page只适用于存储库,所以我找到了一个解决方案:

使用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());
}

请求 / api / test?page = 1&amp; size = 2 返回[3,4]

答案 1 :(得分:0)

让我们打破你的电话。

  1. new PageImpl&lt;&gt;(init,pageable,init.size()
  2. PageImpl的构造函数

    join -a 2 -o $(seq -s, 2.01 .01 2.60 | sed 's/\.0/./g') foo bar
    

    Chunk的构造函数

    public PageImpl(List<T> content, Pageable pageable, long total) {
        // PageImpl subclasses Chunk
        super(content, pageable);
        ...
    }
    
    1. PageImpl ::的getContent()
    2. PageImpl没有实现这个方法,但是Chunk没有。

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

      总之,当您将public List<T> getContent() { return Collections.unmodifiableList(content); } 作为参数传递给构造函数时,可以设置内容的值。当你打电话给init时,你得到的确与你原来的一样多。