2012-06-05 4 views
1

Я тестирую контроллер и просто хочу получить JSON. Однако я замечаю, что контроллер возвращает данные, но он не возвращает JSON правильно с парами ключ/значение. Он буквально возвращает данные только. Однако я замечаю, что если я использую Incident.getAll(), он правильно возвращает JSON. Например, он вернет [INCIDENTID: «Значение»] в отличие от использования executerequery, который просто возвращает данные.Grails: рендеринг JSON с использованием executeQuery

Мой код:

def incident = Incident.executeQuery("select a.INCIDENTID from Incident a") 
render incident as JSON 

ответ

2

Результат от executeQuery список свойств, которые вы указали, а не фактические объекты домена. Например:

TestDomain.executeQuery("select t.id from TestDomain") as JSON 
===> [1, 2, 3] 

Если вы хотите объекты домена, вы можете использовать вместо findAll. Попробуйте что-то вроде этого:

TestDomain.findAll("from TestDomain") as JSON 
===>[{"class":"TestDomain","id":1,"name":"one"}, 
    {"class":"TestDomain","id":2,"name":"two"}, 
    {"class":"TestDomain","id":3,"name":"three"}] 
+0

Ah. Это делает вещи более ясными. Итак, если бы я добавил критерии для findAll(), он все равно вернет мне все объекты домена, соответствующие критериям? –

+0

Правильно, если вы добавите предложение where, оно все равно вернет объекты домена. – ataylor

+0

Вы также можете определить именованный запрос, используя Hibernate Criteria API, который позволяет создавать более сложные запросы http://grails.org/doc/latest/ref/Domain%20Classes/namedQueries.html – dbrin

Смежные вопросы