我有一个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呢?
答案 0 :(得分:0)
好的,我想我找到了一个我满意的解决方案。
为了创造类似的东西:
@Value("#{target...}")
Map<String, String> getEmployees();
我现在正在定义一个名为EmployeeView
的新子投影,我将其用作List
返回的类型。
public interface EmployeeView {
String getId();
String getName();
}
在CompanyView
中,定义现在看起来像这样:
@Value("#{target.employees}")
List<EmployeeView> getEmployees();
这仅返回返回数据中员工的有限子集。