SpEL:要映射列表元素的投影

时间:2016-11-28 11:03:24

标签: java spring-el

我有一个Spring Data MongoDB管理实体,它在子集合中存储元素列表。为了通过Spring MVC只返回该实体的一个子集,我使用projections来自定义数据对象的视图。

可视化我的设置的简化示例:

@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呢?

1 个答案:

答案 0 :(得分:0)

好的,我想我找到了一个我满意的解决方案。

为了创造类似的东西:

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

我现在正在定义一个名为EmployeeView的新子投影,我将其用作List返回的类型。

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

CompanyView中,定义现在看起来像这样:

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

这仅返回返回数据中员工的有限子集。