我试图使用gstring访问嵌套字段,但它抛出异常groovy.lang.MissingPropertyException
我有两个班级
Class Person{
Address address
}
Class Address{
String city
}
在我的代码的某处,我正在做,
def person = Person.get(1)
def field = "address.city"
def city = person."${field}"
我试图从人那里取城的行是扔groovy.lang.MissingPropertyException
如果我尝试使用gstring获取直接属性,它可以工作,但上面给出的代码不起作用。
任何帮助?
答案 0 :(得分:11)
您在这里所做的是尝试按名称address.city
访问属性,该属性等于person."address.city"
,这意味着此处的点被视为属性名称的一部分 - 而不是访问分隔符如你所料。以下代码应解析您的属性:
def city = field.tokenize('.').inject(person) {v, k -> v."$k"}
答案 1 :(得分:3)
我认为问题在于使用点运算符来访问子属性。
这有效:
class Person{
String address
}
def person = new Person(address:'Madrid')
def field = 'address'
assert 'Madrid' == person."${field}"
这有效:
class Person{
Address address
}
class Address {
String city
}
def person = new Person(address: new Address(city: 'Madrid'))
def field = 'address'
def subField = 'city'
assert 'Madrid' == person."${field}"."${subField}"