如何在 spring-data-rest 中将 Page<ObjectEntity> 映射到 Page<ObjectDTO>

新手上路,请多包涵

当我用 PagingAndSortingRepository.findAll(Pageable) 访问数据库时,我得到 Page<ObjectEntity> 。但是,我想将 DTO 公开给客户端而不是实体。我可以通过将实体注入它的构造函数来创建 DTO,但是如何将 Page 对象中的实体映射到 DTO?根据 spring 文档,Page 提供了只读操作。

另外,Page.map 是不可能的,因为我们不支持 java 8。如何手动创建带有映射对象的新页面?

原文由 Tuomas Toivonen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 881
2 个回答

您仍然可以在没有 lambda 表达式的情况下使用 Page.map

 Page<ObjectEntity> entities = objectEntityRepository.findAll(pageable);
Page<ObjectDto> dtoPage = entities.map(new Converter<ObjectEntity, ObjectDto>() {
    @Override
    public ObjectDto convert(ObjectEntity entity) {
        ObjectDto dto = new ObjectDto();
        // Conversion logic

        return dto;
    }
});

原文由 Ali Dehghani 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 Spring Data 2 中,Page map 方法采用 Function 而不是 Converter,但它仍然与 @Ali Dehghani 描述的基本相同。

使用功能:

 Page<ObjectEntity> entities = objectEntityRepository.findAll(pageable);
Page<ObjectDto> dtoPage = entities.map(new Function<ObjectEntity, ObjectDto>() {
    @Override
    public ObjectDto apply(ObjectEntity entity) {
        ObjectDto dto = new ObjectDto();
        // Conversion logic

        return dto;
    }
});

原文由 JayL 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题