Grails/Groovy向现有Java类添加属性,而在尝试使用JSON转换器进行序列化时丢失这些属性?

Grails/Groovy向现有Java类添加属性,而在尝试使用JSON转换器进行序列化时丢失这些属性?,grails,dynamic,groovy,Grails,Dynamic,Groovy,我想知道我在向数据库添加动态属性时缺少了什么 java类,并尝试使用JSON转换器呈现该类。 我有一个纯java pojo,我正在使用以下方法向其添加一个动态属性: // adding property ResetRequest.metaClass.targetIp = "192.168.0.1" // creating object ResetRequest obj = new ResetRequest() // printing the properties println obj.prop

我想知道我在向数据库添加动态属性时缺少了什么 java类,并尝试使用JSON转换器呈现该类。 我有一个纯java pojo,我正在使用以下方法向其添加一个动态属性:

// adding property
ResetRequest.metaClass.targetIp = "192.168.0.1"
// creating object
ResetRequest obj = new ResetRequest()
// printing the properties
println obj.properties
打印属性时,对象具有附加属性 称为“targetIp”,所以看起来一切正常,但当我尝试渲染对象时 作为JSON,添加的属性不在JSON字符串中


任何我缺少的建议。

我认为grails中的JSON转换不会获取动态添加的属性

也许您应该为所讨论的类注册自己的对象封送拆收器

在引导中:

    def init = {servletContext ->
        JSON.registerObjectMarshaller(ResetRequest) {req->
            [
                targetIp:req.targetIp
                //etc 
            ]
    }
更新 此链接显示如何从默认封送处理程序继承并将自己的逻辑添加到封送处理特定字段:


我认为grails中的JSON转换不会获取动态添加的属性

也许您应该为所讨论的类注册自己的对象封送拆收器

在引导中:

    def init = {servletContext ->
        JSON.registerObjectMarshaller(ResetRequest) {req->
            [
                targetIp:req.targetIp
                //etc 
            ]
    }
更新 此链接显示如何从默认封送处理程序继承并将自己的逻辑添加到封送处理特定字段:


您应该在引导程序中注册自定义属性,如

def init = { servletContext ->
  ResetRequest.metaClass.targetIp = {req ->
    return "192.168.0.1";   
  } 
}

您应该像这样在引导中注册自定义属性

def init = { servletContext ->
  ResetRequest.metaClass.targetIp = {req ->
    return "192.168.0.1";   
  } 
}

嘿,马可,你试过我的答案吗?这不管用吗?嘿,马可,你试过我的答案了吗?这不管用吗?