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

标签 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.properties

打印属性时,对象具有附加属性
叫做“targetIp”,所以看起来一切正常,但是当我尝试渲染对象时
作为JSON,添加的属性不在JSON字符串中。

任何建议我所缺少的。

最佳答案

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

也许您应该为该类(class)注册自己的对象编码?

在 bootstrap 中:

    def init = {servletContext ->
        JSON.registerObjectMarshaller(ResetRequest) {req->
            [
                targetIp:req.targetIp
                //etc 
            ]
    }

更新
此链接显示了如何继承默认的Marshaller并添加自己的逻辑以编码特定字段:

http://grails4you.com/2012/04/restful-api-for-grails-domains/

关于grails - Grails/Groovy向现有Java类添加属性,而在尝试使用JSON转换器进行序列化时丢失它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10497646/

相关文章:

url - 如何从 Grails 应用程序的 URL 中删除应用程序名称?

validation - 命令类中缺少validate()方法

动态更新 Sencha Touch Carousel 项目的 HTML 内容?

gradle - 将项目资源添加到Gradle Custom插件

java - 如何解决 groovy/grails 工具套件引用?

Grails 2.0.1 不喜欢 java.util.Date

grails - Grails创建到Webflow的链接

javascript - jQuery Soundboard-播放一个按钮会关闭所有其他按钮

javascript - CSS nth-child 不适用于动态隐藏的元素 [AngularJS]

java - 将 BufferedInputStream 传递给接受 InputStream 的方法