呈现为JSON在Grails中不起作用

呈现为JSON在Grails中不起作用,grails,serialization,Grails,Serialization,我是Groovy和Grails的新手,我正在尝试创建一个返回JSON格式字符串的方法 我读了一些关于转换器的书,从一些资料中我可以了解到(并且)我应该能够做到这一点: import grails.converters.JSON class Record { //... private Map _metadata = [:] String getMetadataJSON(){ return render _metadata as JSON

我是Groovy和Grails的新手,我正在尝试创建一个返回JSON格式字符串的方法

我读了一些关于转换器的书,从一些资料中我可以了解到(并且)我应该能够做到这一点:

import grails.converters.JSON

class Record {

    //...

    private Map _metadata   = [:]

    String getMetadataJSON(){
        return render _metadata as JSON
    }
}
这不仅不起作用,而且没有解析“render”关键字

所以我的两个问题是:

  • 为什么这不起作用,应该如何做
  • “呈现”应该是什么样的语言结构?闭包

render
用于Grails中的控制器,而不是域类(在您的示例中)。如果您想获得某个东西的JSON表示,只需:

String getMetadataJSON() {
  (_metadata as JSON)
}

上面将返回
JSON
格式的
String
表示。Groovy不需要
return
关键字。

render
用于Grails中的控制器,而不是域类(在您的示例中)。如果您想获得某个东西的JSON表示,只需:

String getMetadataJSON() {
  (_metadata as JSON)
}

上面将返回
JSON
格式的
String
表示。Groovy不需要
return
关键字。

返回是不必要的。返回是不必要的。那么,“render”是什么样的语言构造呢?它是一种方法,当在引导过程中某些东西被标识为控制器工件时,框架会将它添加到Grails中的控制器中。它由元编程或traits(取决于Grails的版本)添加。您可以在Grails文档中找到更多关于它的信息。因此,问题最终只是类型转换,在我的测试中,我必须转换两次,首先是一个JSON对象,然后是一个字符串对象:
(record.metadata as JSON)as String=='{“one”:2}'
,那么,“render”是什么样的语言构造呢?它是一种方法,在引导过程中,当某些东西被标识为控制器工件时,框架会将它添加到Grails中的控制器中。它由元编程或traits(取决于Grails的版本)添加。您可以在Grails文档中找到更多关于它的信息。因此问题最终只是类型转换,在我的测试中,我必须转换两次,首先是一个JSON对象,然后是一个字符串对象:
(record.metadata as JSON)as String=='{“one”:2}'