【问题标题】:Include transient domain class properties as restful json or xml response in grails在 grails 中包含瞬态域类属性作为 restful json 或 xml 响应
【发布时间】:2014-09-30 13:26:24
【问题描述】:

我已经阅读了许多尝试并实现这一目标的方法,但我认为这会相当容易?

给定一个域类:

class DomainClassTest{
    String foo
    String bar

    //add accessor
    String getMessage() {
        "Hello"
    }
}

我想在 xml 和 json 响应中包含瞬态属性“消息”。

最简单的方法是什么?

我已阅读有关渲染器的文档; http://grails.org/doc/latest/guide/single.html#renderers

我尝试了以下方法:

DomainClassTestController.groovy:

class DomainClassTestController extends RestfulController<DomainClassTestController>{
    static responseFormats = ['xml','json']

    DomainClassTestController() {
        super(DomainClassTest)
    }
}

/conf/spring/resources.groovy

beans = {
    xmlDomainClassTestRenderer(XmlRenderer, DomainClassTest) {
        includes = ['message']
    }
    jsonDomainClassTestRenderer(JsonRenderer, DomainClassTest) {
        includes = ['message']
    }
}

很简单,但是 json/xml GET 请求返回空。

我很难相信没有不使用 ObjectMarshallers 或转换器的简单方法来修改响应?

【问题讨论】:

  • 使用自定义 marshellers 是正确的方法。这就是您在 Grails 中为您的域类自定义 XML 和 JSON 响应的方式。
  • 好吧……就是这样!谢谢(你的)信息。那我会看看定制的marshellers!
  • 这应该是一个很好的资源,可以为您提供如何完成的示例,而且非常好:compiledammit.com/2012/08/16/…

标签: rest grails grails-orm


【解决方案1】:

我也在处理这个问题,发现有一个非常有用的插件可以自定义域对象的编组/渲染行为: "marshallers"

请注意,对于您使用插件的每个域(在类上指定“编组”),它将绕过您在 resources.groovy 中所做的有关域呈现的任何设置。 (恕我直言,这实际上是一件好事,因为它允许您将有关域类的渲染细节与类保持在同一位置。)

所以您的示例域类将如下所示:

class DomainClassTest {
  static marshalling = {
    virtual {
        message { value, json -> json.value(value.getMessage()) }
    }
  }

  String foo
  String bar

  //add accessor
  String getMessage() {
      "Hello"
  }
}

【讨论】:

    猜你喜欢
    • 2011-07-20
    • 1970-01-01
    • 2014-12-14
    • 2011-01-16
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多