我有一个类似下面的类(class)
public class ParentDTO
{
private String name;
private List<Child> childs;
.... getters and setters
}
我想从表达式中获取第 N 个子名称。
String sQuery ="childs[0].name";
现在我想从父DTO对象获取该 child 的名字
public String getChildName(ParentDTO paretnDTO, String query)
{
// will return first child name when I pass
// query as sQuery
// please help to implement
}
最佳答案
(根据@Jason在评论中的要求,并且OP似乎已经完成了他的研究职责,这里是一个给出更多细节的答案)
我们可以采取两种主要方法,两者在某些方面是相似的:
方法 1:Java Bean 属性
如果您知道您正在检查的 POJO 对象是一个 Java Bean(至少包含其属性的正确 getter/setter),那么您可以使用相当多的 Java Bean Utils,其中一些甚至提供了用于导航 Bean 属性的扩展语法。 Apache Common BeanUtils 是一个示例:
// syntax not checked, just base on my memory. It should be close though.
String child0name = BeanUtils.getProperty(parentDto, "children[0].name");
方法 2:表达语言
如果你要处理更复杂的表达式,或者你处理的对象不是严格的bean(例如,你需要调用该对象的方法),那么你可以考虑使用表达式语言引擎。有很多选择,SpEL 和 MVEL 是其中两个。
通常这些表达式语言可以提供bean utils可以提供的功能,例如:
String child0name = Mvel.eval("children[0].name", parentDto);
// or if you want to call the method and do some more complicated expression,
// you can do it:
String child0name = Mvel.eval(
"children[0].title + ' ' + children[0].constructFullName()",
parentDto);
关于Java 表达式解析获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23531120/