Grails:使用executeQuery呈现JSON

Grails:使用executeQuery呈现JSON,json,grails,groovy,Json,Grails,Groovy,我正在测试一个控制器,只想检索JSON。但是,我注意到控制器返回数据,但它没有正确地返回带有键/值对的JSON。它实际上只返回数据。但是,我注意到,如果使用Incident.getAll(),它将正确返回JSON。例如,它将返回[INCIDENTID:“Value”],而不是使用仅返回数据的ExecuteQuery 我的代码: def incident = Incident.executeQuery("select a.INCIDENTID from Incident a") render in

我正在测试一个控制器,只想检索JSON。但是,我注意到控制器返回数据,但它没有正确地返回带有键/值对的JSON。它实际上只返回数据。但是,我注意到,如果使用Incident.getAll(),它将正确返回JSON。例如,它将返回[INCIDENTID:“Value”],而不是使用仅返回数据的ExecuteQuery

我的代码:

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

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"}]

啊。这让事情更清楚了。因此,如果我向findAll()添加条件,它还会返回所有与条件匹配的域对象吗?正确,如果添加where子句,它仍会返回域对象。您还可以使用Hibernate criteria API定义命名查询,这允许创建更复杂的查询。我还有一个问题要问你们。我正在阅读Grails文档,看到了所有实现类似功能的方法。例如,何时使用List()与findAll()或get()与read()比较合适?如果这是一个单独的问题,请告诉我。再次感谢您的帮助。您能详细说明一下吗..比如如果我想使用带有一些条件的find all和all执行查询..怎么做?