Java 表达式解析获取对象

标签 java spring reflection expression

我有一个类似下面的类(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/

相关文章:

java - 运行 H2(在 DB2 模式下)时的 DB2 语法(限制和脏读)

java - 发布时出现 404 错误,但我的服务器获取数据正常但未正确返回

python - 检查 Python 函数是否引用了任何超出范围的内容

java - 使用反射完全妥协对普通 java 中方法的限制访问 - 为什么这是可能的?

java - 为什么允许在 for 循环中声明变量?

java - Eclipse - Java - 解析 android-23 的数据失败

java - xslt 内未封闭的 html 标签

java - 从被调用的对象调用对象中设置变量

java - 确保 GET/POST 请求上的 ObjectMapper 行为一致

c# - 使用带有动态匿名对象的 NHibernate 在 GroupBy 查询中进行选择