【问题标题】:grails 3 - get child domain objectsgrails 3 - 获取子域对象
【发布时间】:2017-08-21 13:28:42
【问题描述】:

我看过这个Grails get child domain objects,但我还是迷路了。

我已经添加到 conf/application.yml

converters:
    encoding: UTF-8
    grails.converters.json.default.deep: true

但是当我在域上获取时,我仍然得到

[~]$ 卷曲http://localhost:8080/request/2 {"id":2,"stream":{"id":2},"release_label":"ABC_4.3","date_created":"2017-08-21T13:06:27Z","envs":[ {"id":1}],"status":"init"}

我希望扩展流和环境以提供所有记录,而不仅仅是 id。

所以 Request,groovy 是

Stream.groovy 是

package test
import grails.rest.*
class Stream {
    String name
    String feedgroup
    String description
    UnixGroup unixgroup
    String swid
    boolean powercentre = false
    String latest_release
    static hasMany = [envs: Env]

    static constraints = {
          name blank:false, unique: true
    }
}

package test
import grails.rest.*

class Request {
    Date date_created = new Date()
    Date date_completed
    String status = "init"
    String release_label
    Stream stream
    static hasMany = [envs: Env]

    static constraints = {
           date_completed nullable: true
    }
        static searchable = {
            only = [ 'stream', 'status' ]
        }
}

我正在使用 Grails 3.30。

grails.converters.json.default.deep 对 Grails 3 仍然有效吗?以及如何使用它。

【问题讨论】:

    标签: grails


    【解决方案1】:

    我在 grails slack 页面上被告知,当应用程序配置文件为 rest-api 时不使用转换器。

    应该使用 JSON 视图。在渲染中,添加一个选项 deep: true

    例如

    json g.render(book, [deep:true])
    

    book 是域

    更多信息,请参阅http://views.grails.org/latest/#_rendering_domain_classes

    【讨论】:

      【解决方案2】:
      grails.converters.json.default.deep
      

      应该改为:

      json.default.deep
      

      因为您已经在 grails.converters 块中。

      所以它应该是这样的:

      converters:
          encoding: UTF-8
          json.default.deep: true
      

      【讨论】:

      • 尝试了上述方法,但输出中仍然没有完整的子信息。还尝试将其作为 json: default: deep: true
      • 我设置了几个类似于您提供的示例域并对此进行了测试。我在输出中看到了子信息:curl http://localhost:8080/sample{"request":{"id":1,"stream":{"id":1,"feedgroup":"s2","name":"s1","envs":[{"id":1,"title":"title1","name":"env1"}]},"release_label":"label1","date_created":"2017-08-23T01:39:36Z","envs":[{"id":2,"title":"title2","name":"env2"},{"id":1,"title":"title1","name":"env1"}],"date_completed":null,"status":"init"}} 也许先试试 gradle:clean,否则可能会发布更多的 .yml/code。
      • 嗨 LeslieV - 感谢您为此付出的努力。我已经清理并再次运行应用程序,结果仍然相同。 application.yml 的任何其他部分会对此产生影响吗?我想不出我在做什么与你自己不同。我没有在域中使用@Resource,但已经生成了控制器。所以我注意到您的 curl 使用应用程序名称,而我使用记录类型名称。
      • 嗨@john,我想您的 application.yml 中的其他内容可能会影响这一点。如果你想完整地发布它,我可以看看。我在我的 cURL 命令中使用 sample 正在点击我设置的 SampleController。
      • 您的控制器中是否存在有助于提供正确结果的东西?我的 application.yml 是在 create-app 期间创建的默认值,除了 json.default.deep
      猜你喜欢
      • 2013-10-09
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      相关资源
      最近更新 更多