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

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

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


答案 1

您仍然可以使用不带 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;
    }
});

答案 2

在Spring Data 2中,Page map方法采用函数而不是转换器,但它仍然与Dehghani描述@Ali基本相同。

使用功能:

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

推荐