我已经阅读了很多方法来尝试并实现这一目标,但我认为它会相当容易吗?
给定一个域类:
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或转换器的情况下修改响应的简单方法是不是很简单?
答案 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"
}
}