我有一些像下面这样的课程:
@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;
}
我要做的是为 Person 对象编写一个 Utils 方法,该方法采用一个参数,即 attributeName 作为 String 并返回该属性的 getter 值。
前任:
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 的名称或字段的名称,然后我将返回这个 getter。
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 类中的字段,例如:姓名、职位。使用contactInfo 或address 中的字段,我仍然被困在那里。谁能在这里给我一些提示我该怎么做?
慕尼黑8549860
相关分类