У меня есть несколько классов, как показано ниже:
@Getter
@Setter
class Person{
@JsonProperty("cInfo")
private ContactInformation contactInfo;
private String name;
private String position;
}
@Getter
@Setter
class ContactInformation{
@JsonProperty("pAddress")
private Address address;
}
@Getter
@Setter
class Address{
private String street;
private String district;
}
И что я собираюсь сделать, это написать метод Utils для объекта Person, который принимает один параметр - attributeName в виде String и возвращает значение получателядля этого атрибута.
Пример:
attributeName = name -> return person.getName()
attributeName = position -> return person.getPosition()
attributeName = cInfo.pAddress.street -> return person.getContactInfo().getAddress().getStreet()
attributeName = cInfo.pAddress.district -> return person.getContactInfo().getAddress().getDistrict()
Ниже приведено то, что я сделал: я перебираю все поля в объекте Person и проверяю, равно ли attributeName для имени JsonProperty's Name.или Имя поля, тогда я верну этот получатель.
Object result;
Field[] fields = Person.class.getDeclaredFields();
for (Field field : fields) {
JsonProperty jsonProperty = field.getDeclaredAnnotation(JsonProperty.class);
if (jsonProperty != null && jsonProperty.value().equals(attributeName)) {
result = Person.class.getMethod("get" + capitalize(field.getName())).invoke(person);
} else {
if (field.getName().equals(attributeName)) {
result = person.class.getMethod("get" + capitalize(field.getName()))
.invoke(person);
}
}
}
Это работало, но только с полями, расположенными непосредственно в классе Person, например: name, position.С полями внутри contactInfo или адреса я все еще застреваю там.Кто-нибудь может подсказать здесь, как мне это сделать?
Спасибо!