リフレクション API を使用すると、以下のように POJO フィールドを取得できます。継承されたクラスは、ここで問題を見つける可能性があります。
TestClass testObject= new TestClass().getClass();
Fields[] fields = testObject.getFields();
for (Field field:fields)
{
String name=field.getName();
System.out.println(name);
}
または、Reflections API を使用して、クラス内のすべてのメソッドを取得し、それを反復処理して属性名を見つけることもできます (標準の POJO メソッドは get/is/set で始まります) ... このアプローチは、継承されたクラス構造で機能しました。
TestClass testObject= new TestClass().getClass();
Method[] methods = testObject.getMethods();
for (Method method:methods)
{
String name=method.getName();
if(name.startsWith("get"))
{
System.out.println(name.substring(3));
}else if(name.startsWith("is"))
{
System.out.println(name.substring(2));
}
}
ただし、より興味深いアプローチを以下に示します。
Jackson ライブラリの助けを借りて、タイプ String/integer/double のすべてのクラス プロパティと、Map クラス内のそれぞれの値を見つけることができました。(すべてリフレクション API を使用せずに! )
TestClass testObject = new TestClass();
com.fasterxml.jackson.databind.ObjectMapper m = new com.fasterxml.jackson.databind.ObjectMapper();
Map<String,Object> props = m.convertValue(testObject, Map.class);
for(Map.Entry<String, Object> entry : props.entrySet()){
if(entry.getValue() instanceof String || entry.getValue() instanceof Integer || entry.getValue() instanceof Double){
System.out.println(entry.getKey() + "-->" + entry.getValue());
}
}