2013-05-15 50 views
1

我有一個簡單的動作,如這樣的:如何只發送一類的某些屬性,JSON

def showSomething() { 
    render Color.get(params.id) as JSON 
} 

,這會使得Color類爲JSON的所有屬性。但是,如果我只想渲染兩個屬性,例如colorName and shade,該怎麼辦?

回答

2

如果您希望每次呈現對象時渲染相同的屬性,Gjordis都有正確的選項。但是,您可以簡單地這樣做:

Color color = Color.get(params.id) 
render ([colorName: color.colorName, shade: color.shade] as JSON) 
2

這是非常簡單的:

def relevantProperties = ["colorName","shade"] 
def color = Color.get(params.id) 
def reply = relevantProperties.collectEntries { property -> 
    [property, color[property]] 
} 

render reply as JSON 

,並有你:-)

1
import grails.converters.JSON 
class BootStrap { 
    def init = {servletContext -> 
     JSON.registerObjectMarshaller(Color) { 
      def returnArray = [:] 
      returnArray['shade'] = it.shade 
      returnArray['colorName'] = it.colorName 
      return returnArray 
    } 

}

有人可以糾正我,我沒有用過的Grails。但是重寫轉換中調用的函數是關鍵。

+0

這缺乏一定的靈活性,不是嗎? – fabiangebert

+0

它將轉換器註冊到一個類中。你只需要做一次。之後,每次調用render ...時都會返回相同的值作爲JSON – Gjordis