我有这个代码。我想在JSON中有一些行,找到它我试图使用标准。我希望将每个案例渲染为json。 示例:我希望我的表中的行具有名称:“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
答案 0 :(得分:2)
我可能没有正确地得到关于预期的问题。我的假设是,您可以在请求中使用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 - &gt;应将id
设置为134,并且将评估检查1
http://mydomain.com/catalog?name=Pep - &gt;应将name
设置为Pep
,并将检查2将被评估为
http://mydomain.com/catalog?year=1987 - &gt;应将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