2015-10-07 27 views
16

Tôi đang sử dụng dữ liệu Spring JPA và tôi có một PagingAndSortingRepository<Contact, Long> sử dụng một JPASpecificationExecutor<Contact>. Tôi chuyển một mẫu SpecificationPageable vào phương thức .findAll() của kho lưu trữ này để nhận được Page<Contact>.Chuyển đổi loại nội dung Trang dữ liệu Spring JPA

Tuy nhiên, thực thể Contact của tôi có nhiều trường và ánh xạ bổ sung mà tôi không cần trên giao diện người dùng của mình. Vì vậy, tôi có một số ContactDto chỉ chứa các trường cần thiết và tôi có phương thức có thể chuyển đổi từ Contact thành ContactDto.

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

Tôi sẽ sử dụng phương pháp chuyển đổi này để chuyển đổi Page<Contact> thành Page<ContactDto> như thế nào?

Tôi có thể lấy nội dung của số Page<Contact> và thực hiện chuyển đổi như thế này.

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

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

Nhưng sau đó tôi đang trái với một Collection thay vì một Page, và tôi không biết làm thế nào để có được điều đó Collection vào nội dung của Page. Có cách nào để làm việc này không? Hoặc có cách nào khác để gọi chuyển đổi trên chính cá thể Page<Contact> không?

Trả lời

30

Chỉ ra rằng Page có phương thức .map() riêng của mình, để bạn có thể chuyển tham chiếu phương thức để thực hiện chuyển đổi.

Dưới đây là cách tôi kết thúc chuyển đổi.

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

Phương pháp convertToContactDto chỉ đơn giản là tạo ra và trả về một thể hiện của lớp tôi đang cố gắng để chuyển đổi sang:

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; 
} 
+0

này đã làm các trick. Dễ dàng hơn nhiều so với việc tạo một thể hiện Trang mới và sao chép các đối tượng. –

+0

@Andrew bạn có thể bao gồm một số mẫu mã từ convertToContactDto không? –

Các vấn đề liên quan