在grails中包含临时域类属性作为restful json或xml响应

时间:2014-09-30 13:26:24

标签: rest grails gorm

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

给定一个域类:

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或转换器的情况下修改响应的简单方法是不是很简单?

1 个答案:

答案 0 :(得分:2)

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

请注意,对于您使用插件的每个域(在类上指定&#34;编组&#34;),它将规避您在resources.groovy中对域的呈现所做的任何设置。 (这实际上是一个好东西恕我直言,因为它允许你将关于你的Domain类的渲染细节保持在与类相同的位置。)

所以你的示例Domain类看起来像这样:

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

  String foo
  String bar

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