问题陈述:
想象一个如下所示的嵌套对象:
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/