一尘不染

转换Spring Data JPA页面内容的类型

hibernate

我正在使用Spring Data JPA,并且有一个PagingAndSortingRepository<Contact, Long>使用JPASpecificationExecutor<Contact>。我将SpecificationPageable实例传递给.findAll()此存储库的方法以获取Page<Contact>

但是,我的Contact实体在前端不需要很多额外的字段和映射。所以,我有一个ContactDto只包含必要的字段,我也可以从一个转换方法ContactContactDto

private ContactDto convertToContactDto(Contact contact) {
    //do the conversion
}

我将如何使用这种转换方法将转换Page<Contact>Page<ContactDto>

我可以获取的内容,Page<Contact>并像这样进行转换。

final Page<Contact> contactPage = pagingAndSortingContactRepository
        .findAll(ContactSpecification.findByFirstNmLike(firstNm), pageable);

final Collection<ContactDto> contactDtos = contactPage.getContent()
    .stream()
    .map(this::convertToContactDto)
    .collect(Collectors.toList());

但是然后我留下了一个Collection而不是一个Page,而我不知道如何将它Collection纳入内容Page。有没有办法做到这一点?还是有另一种方法可以在Page<Contact>实例本身上调用转换?


阅读 299

收藏
2020-06-20

共1个答案

一尘不染

事实证明,它Page具有自己的.map()方法,您可以向其传递方法引用以进行转换。

这就是我最终进行转换的方式。

final Page<ContactDto> contactDtoPage = contactPage.map(this::convertToContactDto);

convertToContactDto方法只是创建并返回我要转换为的类的实例:

private ContactDto convertToContactDto(final Contact contact) {
    final ContactDto contactDto = new ContactDto();
    //get values from contact entity and set them in contactDto
    //e.g. contactDto.setContactId(contact.getContactId());
    return contactDto;
}
2020-06-20