2015-01-21 47 views
-1

在grails中如何讓控制器中的每個動作具有JSON.registerObjectMarshaller。JSON Marshaller在控制器中的每個動作(Grails)

下面是一個例子

User域對象:

String username 
String empId 
String attendanceID 
String password 
String firstName 
在我的控制器

def myaction1() { 
    def user=User.getAll() 
    // XXX here i want to return just username and empId 
    render user as JSON 
} 

def myaction2() { 
    def user=User.getAll() 
    // XXX here i want to return just username and firstName 
    render user as JSON 
} 
+2

你在試圖做什麼?爲什麼每個控制器操作需要一個?你有什麼嘗試?什麼不是在嘗試你所嘗試的? – 2015-01-21 11:53:23

+1

爲什麼你不只是返回一個地圖的內容? – cfrick 2015-01-21 13:26:12

+0

@cfrick謝謝編輯... – 2015-01-22 12:14:25

回答

4

雖然它可能是諸如簡單的領域有點大材小用,而你可能會因爲剛剛返回Map而丟失數據,問題仍然有效。

你如何註冊自定義命名marshallers?

通常情況下,您會在grails-app/conf/BootStrap.groovy(或新文件grails-app/conf/CustomMarshallersBootStrap.groovy,如果您想保持清潔)內部執行此操作。這樣的例子可能是這樣的:

// Bootstrap.groovy 
import grails.converters.JSON 
import com.example.User 

class BootStrap { 
    def init = { servletContext -> 
    JSON.createNamedConfig("userEmployeeView", { 
     JSON.registerObjectMarshaller(User) { User o -> 
     return [ 
      username: o.username, 
      empId: o.empId 
     ] 
     } 
    }) 
    JSON.createNamedConfig("userOtherView", { 
     JSON.registerObjectMarshaller(User) { User o -> 
     return [ 
      username: o.username, 
      firstName: o.firstName 
     ] 
     } 
    }) 
    } 
    def destroy = { } 
} 

這將註冊兩個命名marshallers,你可以在你的控制器(S)使用這樣的:

// UserController.groovy 
package com.example 
import grails.converters.JSON 

class UserController { 
    def action1() { 
    def users = User.getAll() 
    JSON.use("userEmployeeView") { 
     render users as JSON 
    } 
    } 

    def action2() { 
    def users = User.getAll() 
    JSON.use("userOtherView") { 
     render users as JSON 
    } 
    } 
} 

以上使用名爲marshllers它允許你來控制創建最終的JSON輸出時將使用哪個JSON表示(實際上只是一個Map)。

希望這會有所幫助,並且原諒任何錯別字,因爲我從頭頂寫下了這個錯誤。

+0

thx回覆我試過你的代碼爲action2()它工作正常。但對於action1()我得到所有來自用戶域的字段。 – 2015-01-22 12:03:43

+0

JSON.createNamedConfig( 「clientView」,{ \t \t \t JSON.registerObjectMarshaller(用戶){用戶-O - > \t \t \t \t返回[ \t \t \t \t用戶名:o.username, \t \t \t \t姓: o.firstName, \t \t \t \t名字:o.lastName \t \t \t \t] \t \t \t} \t \t \t})爲了測試i的自舉加入此,現在我調用JSON.use動作2()( 「userOtherView」),但我得到了JSON { 「用戶名」:「XYZ。 com「,」firstName「:」ABC「,」lastName「:」Admin「} – 2015-01-22 12:29:41

+0

它是緩存我們可以去任何東西來刪除緩存 – 2015-01-22 12:37:00

相關問題