2016-03-09 22 views
1

問題陳述的屬性:走過Java中的複雜對象圖,並得到索引(類似於XPath的)

想象像下面嵌套對象:

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

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

class Employee{ 
String name; 
... 
} 

一個公司有很多部門,每個部門都有很多員工。

Json正文由一個庫解組,以創建Java對象公司,如上所示。

假設我有一個名字爲「John」的僱員,我正在尋找一個api,當我傳入Employee對象的哈希或屬性名稱時,會返回該屬性的路徑。

搜索(對象的attributeName,對象的AttributeValue),即搜索( 「名」, 「約翰」)應該返回 company.departments [0] .employees [5]

是否有一個良好的開源庫暴露相似api或什麼是最好的方法走過一個複雜的對象圖

JSR 303 Hibernate Validator,它將屬性路徑自動添加到ConstraintViolation不會公開它通過任何方式從複雜對象圖獲取屬性路徑的行爲對象

如果有人跑了,請多多指教通過類似的需求

+0

你後來用這個結果'company.departments [0] .employees [5]'會做什麼?只能以文本形式打印或以某種方式迭代它或別的? –

+0

我只是需要它的文本形式,這將是我想發回給用戶的一些額外的元數據。 用例是我們有自定義業務邏輯,我們向用戶返回400的錯誤請求,我們希望將路徑發送回深層嵌套對象圖中的屬性,我們相信這裏存在字段不匹配或發送的值不正確 – hackmabrain

回答

1

我還沒有看到這樣做的庫,但你可以從我的對象迭代器博客修改代碼來做到這一點。

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

迭代器導航的對象圖產生類似以下的輸出,但是你可以把它做任何事情 - 包括尋找一個鍵值對。

[email protected] 
    deptId = 5775 
    employeeList = [email protected] 
employeeList[0] = com.stackhunter[email protected] 
    firstName = Bill 
    id = 111 
    lastName = Gates 
employeeList[1] = [email protected] 
    firstName = Howard 
    id = 222 
    lastName = Schultz 
employeeList[2] = [email protected] 
    budget = 75000.0 
    firstName = Jeff 
    id = 333 
    lastName = Bezos 
    name = Sales 
[[email protected] 
    object[0] = 111 
    object[1] = 222 
    object[2] = 333 

快樂編碼!

+0

讓我試一下,如果能得到它的話,我會回到這個線程。感謝分享 – hackmabrain