【问题标题】:render as JSON not working in Grails呈现为 JSON 在 Grails 中不起作用
【发布时间】:2016-01-18 23:23:16
【问题描述】:

我对 Groovy 和 Grails 还很陌生,我正在尝试创建一个返回 JSON 格式字符串的方法。

我阅读了一些关于转换器的内容,从我可以从几个来源(here 和here)了解到的内容,我应该能够做到这一点:

import grails.converters.JSON

class Record {

    //...

    private Map _metadata   = [:]

    String getMetadataJSON(){
        return render _metadata as JSON
    }
}

不仅这不起作用,而且“render”关键字也没有被解析。

所以我的两个问题是:

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

【问题讨论】:

  • 不需要退货。

标签: grails serialization


【解决方案1】:

render 用于 Grails 中的控制器,而不是(看起来是)域类(在您的示例中)。如果您想获得某事物的 JSON 表示,那么只需:

String getMetadataJSON() {
  (_metadata as JSON)
}

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

【讨论】:

  • 那么,“渲染”是什么样的语言结构?
  • 这是一种在引导过程中被识别为控制器工件时由框架添加到 Grails 中的控制器的方法。它是通过元编程或特征添加的(取决于 Grails 的版本)。您可以在 Grails 文档中找到有关它的更多信息。
  • 所以问题最终只是类型转换,在我的测试中我不得不转换两次,首先是 JSON 对象,然后是 String 对象:(record.metadata as JSON) as String == '{"one":2}'
猜你喜欢
  • 2012-06-19
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多