2

問題文:

以下のようなネストされたオブジェクトを想像してください。

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

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

class Employee{
String name;
...
}

会社には多くの部門があり、各部門には多くの従業員がいます。

Json 本体はライブラリによって非整列化され、上記のように Java オブジェクト Company が作成されます。

名前が「John」の従業員がいるとします。API を探しています。この API は、Employee オブジェクトのハッシュを渡すか、属性名がその属性へのパスを返します。

search(Object attributeName, Object attributeValue) つまり、search("name", "John") は company.departments[0].employees[5] を返す必要があります

同様の API を公開している優れたオープン ソース ライブラリはありますか、または複雑なオブジェクト グラフをウォークスルーするための最良の方法は何ですか?

ConstraintViolation にプロパティ パスを自動的に追加する JSR 303 Hibernate Validator は、任意のオブジェクトを介して複雑なオブジェクト グラフからプロパティ パスを取得する方法に関する動作を公開しません。

誰かが同様のニーズを経験した場合の親切なアドバイス

4

2 に答える 2

2

これを正確に行うライブラリは見たことがありませんが、私のオブジェクト イテレータ ブログのコードを変更して、これを行うことができます。

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

ハッピーコーディング!

于 2016-03-09T00:34:33.633 に答える