我有这段代码。我想在JSON中有一些行,以尝试使用条件来查找它。我想将每种情况都渲染为json。
示例:我希望表中具有Name:“pepito”的行。如果我放置params.nombre,但是我只希望JSON中的这一行怎么办呢?
我试图用findbyNombre(params.nombre)做到这一点,但是如果我在他的条件下加上if / else,那就找不到了。
请,有人可以帮我吗????我必须给我一份工作的代码,我迷路了!!!
谢谢!
case "GET":
def criterios=CatalogoJson.createCriteria().list() {
if (params.nombre) {
eq('nombre', params.nombre)
// render CatalogoJson.findByNombre(params.nombre)as JSON
}
if(params.id) {
eq('id', CatalogoJson.findById(params.id))
}
}
render criterios as JSON
break
最佳答案
我可能没有正确地预期到什么问题。我的假设是,您在请求中可以使用params
(nombre或Id或两者)。基于此假设,您可以执行以下条件。注意:-我使用toInteger()
,因为您提到的数据类型为int
,通常ids
是与GORM和Hibernate持久层结合使用的Long
。
def criterios = CatalogoJson.createCriteria().listDistinct {
if(params.id) {
idEq(params.id.toInteger())
}
if (params.nombre) {
eq('nombre', params.nombre)
}
}
render criterios as JSON
更新
好吧,让我再尝试一次。再次,如果我没有正确地关注您,请告诉我。
您期望映射URL的方式不是RESTful的。相反,有一种最好的方法来实现您在REST服务中的期望:
令人愉快的方式或我喜欢这种方式
网址映射应如下所示
"/catalog/$id?"(resource: 'catalog')
//Controller Action:-
def show(){
def criterios = CatalogoJson.createCriteria().list {
if(params.id) { //check 1
idEq(params.id.toInteger())
} else if(params.name) { //check 2
eq('name', params.name)
} else if(params.year){ //check 3
eq('year', params.year)
} else if(params.others){ //check 4
eq('others', params.others)
} //so on an so forth //Can also use Switch case if you want
}
render criterios as JSON
}
用例:-
http://mydomain.com/catalog/134->应将
id
设置为134,并检查1http://mydomain.com/catalog?name=Pep->应将
name
设置为Pep
并检查2http://mydomain.com/catalog?year=1987->应该将
year
设置为params作为1987
并检查3推断-
使用命名查询参数来针对您在REST服务和域中的需求逐项列出您的参数。如果要使用未命名的参数,则URL映射如下所示:
"/catalog/$id/$name?/$year?/$others?"(resource: 'catalog')
这种方法的问题是您的网址应类似于
http://mydomain.com/catalog/134
http://mydomain.com/catalog/134/Pep
http://mydomain.com/catalog/134/Pep/1987
您的可选参数不再是可选的。看看Optional Variables in URL mapping
关于json - Grails中将JSON作为渲染标准的问题!在一个 Restful 服务中找到一个字段并进行渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16712234/