grails.converters.JSON除了少数属性

Bel*_*lla 10 grails groovy json render converter

我使用的是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 
     }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有任何简短的方法只渲染部分属性(例如渲染除val3属性以外的所有属性)?

Nir*_*mal 5

你可以这样做:

def myClass = MyClass.get(1)

 //include
 render myClass.part(include:['val1', 'val2']) as JSON

 //except
 render job.part(except:['val2','val3']) as JSON
Run Code Online (Sandbox Code Playgroud)

Bootstrap.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 = {
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您知道如何创建我们自己的插件,那么只需为此创建一个插件,以便您可以在所有grails应用程序中使用它.

  • 你应该参考你获得代码的地方http://foxgem.blogspot.com/2010/06/return-partial-domain-class.html (2认同)

Gre*_*egg 3

如果您只想始终包含特定属性,那么您确实需要使用 ObjectMarshaller 接口。请参阅这篇文章了解更多详细信息。