首页 > 解决方案 > 来自 Spring 数据的 Page 的映射如何工作?

问题描述

正如标题所说,来自 org.springframework.data.domain.Page的地图是如何工作的?

根据文档,它建议您将转换器作为地图参数,然后您将获得一个包含转换后内容的新地图。根据这种解释,我将代码编写如下。

Page<T> results = getPagedResults();
return results.map(x -> {
  x.setElement("some constant");
  return x;
});

然而,上述并没有按预期工作。我得到了所有其他值(如计数等)完整的页面,但内容是一个空列表!我实际上不得不以这种方式编写代码。

Page<T> results = getPagedResults();
return new Page<T>() {
  @Override
  public int getTotalPages() {
    return results.getTotalPages();
  }

  ...

  @Override
  public List<T> getContent() {
    List<T> contents = result.getContent();
    for (T content : contents) {
      content.setElement("some constant");
    }
    return contents;
  }

  ...
};

第二个选择是冗长的,似乎做了多余的工作。我本来希望第一段代码也能做到这一点,但事实并非如此。

我读错了文档吗?如果不应该使用 Page 的 map 功能,你会在哪里使用它,就像我使用它的方式一样?

标签: javaspringpagination

解决方案


像下面这样放置一个真正的转换器怎么样:

        Page<T> results = getPagedResults();
        Page<T> convertedResults = results.map(new Converter<T, T>() {
            @Override
            public T convert(T page) {
                Page page2 = new Page();
                page2.setElement('some constant');
                //set other fields

                return page2;
            }
        });

推荐阅读