在Grails中将标准渲染为json的问题!在一个宁静的服务中找到一个字段并渲染它

时间:2013-05-23 11:02:12

标签: json rest grails render criteria

我有这个代码。我想在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

1 个答案:

答案 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