2016-08-19 2 views
9

PagingAndSortingRepository.findAll(Pageable)でデータベースにヒットすると、Page<ObjectEntity>と表示されます。しかし、DTOをエンティティではなくクライアントに公開したいのです。エンティティをコンストラクタに挿入するだけでDTOを作成できますが、PageオブジェクトのエンティティをDTOにどのようにマップできますか? Springのドキュメントによると、Pageは読み取り専用操作を提供します。私たちはどのように手動でマッピングされたオブジェクトを使用して新しいページを作成するには、Java 8のサポートを持っていないようページ<ObjectEntity>とページ<ObjectDTO>とのデータを交換する

また、Page.mapは可能性は、ないですか?

あなたはまだラムダ式なし Page.mapを使用することができます
+2

は私はわからないが、私はあなたがラムダ式なし 'Page.map'を使用することができますね。 'Converter <? 'のインスタンスを渡すだけです。スーパーT、? extend S> ' –

+1

これは正しい –

答えて

16

:ここ

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

は、私の解決策は、@Ali Dehghani

private Page<ObjectDTO> mapEntityPageIntoDTOPage(Page<ObjectEntity> objectEntityPage) { 
     return objectEntityPage.map(new Converter<ObjectEntity, ObjectDTO>() { 
      public ObjectDTO convert(ObjectEntity objectEntity) { 
       return new ObjectDTO(objectEntity, httpSession); 
      } 

     }); 
    } 
0

そしてjava8でのおかげである:

Page<ObjectEntity> entities = 
objectEntityRepository.findAll(pageable) 
.map(ObjectDto::fromEntity); 

fromEntityは、変換ロジックを含むObjectDtoの静的メソッドです。春データ2では

0

、ページマップ方式ではなく、コンバータの機能がかかりますが、それはまだ基本的に@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; 
    } 
}); 
関連する問題