2017-10-07 239 views
2

我在渲染List結果時有問題,Grails是不能渲染列表的? 這裏我的代碼Grails 3 JSON渲染無法渲染列表?

def findSome(){ 
    String query = params?.some 
    List<Some> someList = Some.createCriteria().list(max : 5) { 
     if(query != null && query != ""){ 
      and { 
       like("name", query) 
      } 
     } 

     order("name", "asc") 
    } 
    someList = someList == null ? new ArrayList<Some>() : someList 

    ->> render someList as JSON 
} 

有什麼錯我的代碼?我記得的是,grails可以渲染對象列表。但使用此代碼時,請始終按照標記->>返回空值。

+0

什麼是'調用println someList'渲染前的輸出? –

回答

3

既然你從你的標準獲得結果的查詢,你守的對象列表ld使用render someList作爲JSONArray。爲了呈現爲JSON,您的列表應該具有相應的鍵值對。如果您真的想要JSON對象,最好將someList轉換爲鍵值對的映射並呈現爲JSON。

def findSome(){ 
String query = params?.some 
List<Some> someList = Some.createCriteria().list(max : 5) { 
    if(query != null && query != ""){ 
     and { 
      like("name", query) 
     } 
    } 

    order("name", "asc") 
} 
someList = someList == null ? new ArrayList<Some>() : someList 

render someList as JSONArray 

}如果要呈現爲JSON使用下面的代碼

def findSome(){ 
def someMap=[:] 
String query = params?.some 
List<Some> someList = Some.createCriteria().list(max : 5) { 
    if(query != null && query != ""){ 
     and { 
      like("name", query) 
     } 
    } 

    order("name", "asc") 
} 
someList = someList == null ? new ArrayList<Some>() : someList 
someList.each{ 
    someMap.put(it.id,it) 
} 
render someMap as JSON 

}

0

您應該移動條件以外的查詢測試。如果查詢什麼都沒有,那麼沒有意義。你也不需要,在你的標準查詢中,你可以使用eq(「name」,查詢)

在你的情況下,like和eq是相同的。

+0

除非查詢在其中有某處%... – billjamesdev

+0

我已經嘗試過你所說的。與findAll()和我看到對象不是null。但是這個控制器總是返回null異常,在錯誤視圖中有'['''。我不知道這個JSON轉換器會發生什麼:| – dadang1234

0

是的,grails可以呈現對象列表。關於你的查詢,你可以簡化爲這樣的東西。

def findSome() { 
    respond Some.createCriteria().list { 
     like 'name', "%$query%" 

     maxResults 5 
     order 'name', 'asc' 
    } 
} 

如果您關注的是,查詢參數是空的,你可以委託你的情況下責任command objectsurl mappings constraints這取決於。

Responding with JSON部分,你可以找到其他的方式來爲JSON

+0

我認爲錯誤不在查詢中。我用findAll()試過了,它返回相同的錯誤:| – dadang1234

+0

你使用什麼grails版本? – user615274

+0

Grails版本:3.2.8 – dadang1234

0

這發生在我身上只有一次迴應,我通過強迫響應解決它:

render(text: someList as JSON, contentType: 'application/json', encoding: 'UTF-8') 

這是相當明顯的,但要確保該方法是控制器內,故有此配置:

static responseFormats = ['json', 'html']