2016-11-28 2 views
1

私はSpringデータMongoDB管理エンティティを持ち、そのサブコレクション内に要素のリストを格納しています。 Spring MVCを介してこのエンティティのサブセットのみを返すために、私はprojectionsを使ってデータオブジェクトのビューをカスタマイズしています。SpEL:マップするリスト要素の投影

私のセットアップ視覚化するための単純化されたサンプル:ユーザー・ビーイングと

@Getter 
@Setter 
@Document(collection = "test") 
public class CompanyEntity { 

    @Id 
    private String id; 
    private List<Employee> employees; 
    ... 
} 

を:

@Getter 
@Setter 
public class Employee { 

    private String id; 
    private String name; 
    ... 
} 

ビューはこのように見えるシンプルなインターフェイスである:私は「ながら

public interface CompanyView { 

    String getId(); 
    @Value("#{target.employees.![name]}") 
    List<String> getEmployeeNames(); 
} 

直接#{target.employees.![name]}経由で従業員の名前を直接リストに投影することができますemployee.idをキーに使用し、employee.nameを値として使用して、現在のコードをマップに置き換えようとすると何とか失われました。

これも可能ですか、それともcustom functionと書く必要がありますか?

答えて

0

OK、私は満足している解決策を見つけたと思います。

@Value("#{target...}") 
Map<String, String> getEmployees(); 

私は今、私は返すようにListのための型として使用EmployeeViewと呼ばれる新しいサブ突起を定義しています:のようなものを作成するために

public interface EmployeeView { 
    String getId(); 
    String getName(); 
} 

CompanyViewでの定義は次のようになりん:

@Value("#{target.employees}") 
List<EmployeeView> getEmployees(); 

これは、返されるデータ内の従業員の限られたサブセットを返します。

関連する問題