我使用的是grails-1.3.2和hbase-0.2.4。
我有以下域类:
class MyClass{
String val1
String val2
String val3
//----
}
class MyClassController{
def someAction = {
def myClass = new MyClass()
//----
String valAsJson = (myClass as JSON)
render valAsJson
}
}我的问题是,是否有任何简单的方法只渲染部分属性(例如,渲染除val3属性之外的所有属性)?
发布于 2011-05-09 20:44:15
如果您希望始终只包含特定的属性,那么您可能真的希望使用ObjectMarshaller接口。有关更多详细信息,请参阅this article。
发布于 2011-05-09 20:07:18
你可以这样做:
def myClass = MyClass.get(1)
//include
render myClass.part(include:['val1', 'val2']) as JSON
//except
render job.part(except:['val2','val3']) as JSONBootstrap.groovy :
import org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor as Events
class BootStrap {
def grailsApplication
def excludedProps = [Events.ONLOAD_EVENT,
Events.BEFORE_DELETE_EVENT, Events.AFTER_DELETE_EVENT,
Events.BEFORE_INSERT_EVENT, Events.AFTER_INSERT_EVENT,
Events.BEFORE_UPDATE_EVENT, Events.AFTER_UPDATE_EVENT]
def init = { servletContext ->
grailsApplication.domainClasses.each{ domainClass ->
domainClass.metaClass.part= { m ->
def map= [:]
if(m.'include'){
m.'include'.each{
map[it]= delegate."${it}"
}
}else if(m.'except'){
m.'except'.addAll excludedProps
def props= domainClass.persistentProperties.findAll {
!(it.name in m.'except')
}
props.each{
map[it.name]= delegate."${it.name}"
}
}
return map
}
}
}
def destroy = {
}
}如果您知道如何创建我们自己的插件,那么只需为此创建一个插件,这样您就可以在所有grails应用程序中使用它。
发布于 2011-05-09 20:52:04
或者,您可以只创建所需属性的映射,然后将其编码为JSON
Map m = [ 'val1', 'val2' ].inject( [:] ) { map, val -> map."$val" = a."$val" ; map }
render m as JSON要排除属性,您需要执行以下操作(未测试)
def exclude = [ 'val3' ]
Map m = new DefaultGrailsDomainClass( MyClass.class ).properties.findAll {
!( it.name in exclude )
}.inject( [:] ) { map, val ->
map."$val.name" = a."$val.name" ; map
}
render m as JSONhttps://stackoverflow.com/questions/5936300
复制相似问题