SpEL:要映射的列表元素的投影
SpEL: Projection of list elements to map
我有一个 Spring 数据 MongoDB 托管实体,它在其子集合中存储元素列表。为了通过 Spring MVC 仅 return 此实体的一个子集,我使用 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 因此?
好的,我想我找到了一个令我满意的解决方案。
为了创建类似的东西:
@Value("#{target...}")
Map<String, String> getEmployees();
我现在正在定义一个名为 EmployeeView
的新子投影,我将其用作 List
到 return 的类型。
public interface EmployeeView {
String getId();
String getName();
}
在 CompanyView
中,定义现在看起来像这样:
@Value("#{target.employees}")
List<EmployeeView> getEmployees();
这 return 只是 returned 数据中有限的员工子集。
我有一个 Spring 数据 MongoDB 托管实体,它在其子集合中存储元素列表。为了通过 Spring MVC 仅 return 此实体的一个子集,我使用 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 因此?
好的,我想我找到了一个令我满意的解决方案。
为了创建类似的东西:
@Value("#{target...}")
Map<String, String> getEmployees();
我现在正在定义一个名为 EmployeeView
的新子投影,我将其用作 List
到 return 的类型。
public interface EmployeeView {
String getId();
String getName();
}
在 CompanyView
中,定义现在看起来像这样:
@Value("#{target.employees}")
List<EmployeeView> getEmployees();
这 return 只是 returned 数据中有限的员工子集。