java - 遍历 Java 中的复杂对象图并获取属性的索引(类似于 xpath)

标签 java javabeans jxpath

问题陈述:

想象一个如下所示的嵌套对象:

class Company{
...
List<Department> departments;
}

class Department{
...
List<Employee> employees;
}

class Employee{
String name;
...
}

一家公司有很多部门,每个部门又都有很多员工。

Json 主体由库解码,以创建 Java 对象 Company,如上所示。

假设我有一个名为“John”的员工,我正在寻找一个 api,当我传入 Employee 对象的哈希值或属性名称时,它会返回该属性的路径。

search(Object attributeName, Object attributeValue) 即 search("name", "John") 应该返回 公司.部门[0].员工[5]

是否有一个好的开源库公开类似的 api,或者什么是遍历复杂对象图的最佳方法

JSR 303 Hibernate Validator 自动将属性路径添加到 ConstraintViolation 中,不会公开如何通过任何对象从复杂对象图中获取属性路径的行为

如果有人有类似的需求,请提供建议

最佳答案

我还没有看到一个库可以完全执行此操作,但您可以修改我的对象迭代器博客中的代码来执行此操作。

https://blog.stackhunter.com/2014/07/09/convert-java-objects-to-string-with-the-iterator-pattern/

迭代器导航对象图以生成如下所示的输出,但您可以让它执行任何操作 - 包括搜索键值对。

com.stackhunter.example.employee.Department@129719f4
  deptId = 5775
  employeeList = java.util.ArrayList@7037717a
employeeList[0] = com.stackhunter.example.employee.Employee@17a323c0
  firstName = Bill
  id = 111
  lastName = Gates
employeeList[1] = com.stackhunter.example.employee.Employee@57801e5f
  firstName = Howard
  id = 222
  lastName = Schultz
employeeList[2] = com.stackhunter.example.employee.Manager@1c4a1bda
  budget = 75000.0
  firstName = Jeff
  id = 333
  lastName = Bezos
  name = Sales
[I@39df3255
  object[0] = 111
  object[1] = 222
  object[2] = 333

祝你编码愉快!

关于java - 遍历 Java 中的复杂对象图并获取属性的索引(类似于 xpath),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880478/

相关文章:

java - 收集数组列表中的所有可观察字符串

java - 为什么类 CloneNotSupportedException 是一个已检查的异常,而不是扩展 RuntimeException?

scala - 从 java.lang.Iterator 创建一个不可变列表

java - 用于过滤 SOAP 消息的 JXPath

java - Apache Felix 过滤器问题

java - 包装方法时编译错误引发异常

java - 变量的 Spring Boot 约定

java - 应用程序配置,Bean 到 xml

java - OpenCSV - 注册自定义转换器

java - 如何让 JXPath 干净地设置列表/集合条目