Grails使用gstrings访问嵌套字段

Ans*_*pai 3 grails groovy gstring

我试图使用gstring访问嵌套字段但它抛出异常groovy.lang.MissingPropertyException

我有两节课

Class Person{
   Address address
}
Class Address{
  String city
}
Run Code Online (Sandbox Code Playgroud)

在我的代码的某处,我正在做,

def person = Person.get(1)
def field = "address.city"
def city = person."${field}"
Run Code Online (Sandbox Code Playgroud)

我试图从人那里获取城市的行正在抛出groovy.lang.MissingPropertyException

如果我尝试使用gstring获取直接属性它可以工作,但上面给出的代码不起作用.

有帮助吗?

Nik*_*kov 11

你在这里做的是试图通过名称访问一个属性,address.city它等于 person."address.city",这意味着这里的点被视为属性名称的一部分 - 而不是你期望的访问分隔符.以下代码应解析您的属性:

def city = field.tokenize('.').inject(person) {v, k -> v."$k"}
Run Code Online (Sandbox Code Playgroud)