地图中的 Groovy 对象属性

gro*_*ovy 5 groovy

不必从对象声明映射中的所有属性,例如:

prop1: object.prop1
Run Code Online (Sandbox Code Playgroud)

你不能像下面那样把物体放在那里吗?或者什么是实现这一目标的正确方法?

results: [
    object, 
    values: [
        test: 'subject'
    ]
]
Run Code Online (Sandbox Code Playgroud)

tim*_*tes 12

object.properties会给你一个class,以及

你应该能够做到:

鉴于您的 POGO 对象:

class User {
    String name
    String email
}

def object = new User(name:'tim', email:'tim@tim.com')
Run Code Online (Sandbox Code Playgroud)

编写一个方法来检查类并从中提取非合成属性:

def extractProperties(obj) {
    obj.getClass()
       .declaredFields
       .findAll { !it.synthetic }
       .collectEntries { field ->
           [field.name, obj."$field.name"]
       }
}
Run Code Online (Sandbox Code Playgroud)

然后,将其映射到您的结果映射中:

def result = [
    value: true, 
    *:extractProperties(object)
]
Run Code Online (Sandbox Code Playgroud)

为你带来:

['value':true, 'name':'tim', 'email':'tim@tim.com']
Run Code Online (Sandbox Code Playgroud)