当前位置: 首页 > 知识库问答 >
问题:

向Grails restfulcontroller添加功能

文寒
2023-03-14

我有一个非常简单的restful控制器,看起来像这样:

class PersonController extends RestfulController<Person> {

    static responseFormats = ['json', 'xml']

    PersonController() {
        super(Person)
    }
}

但是,现在我想为此添加一个搜索选项。圣杯是如何实现这一目标的?

我想补充以下内容:

def search(Map params) {
    println params
}

但这使得Grails (2.3)崩溃(| Error编译时出现致命错误org . Apache . tools . ant . build exception:编译失败(使用- stacktrace查看完整跟踪))。

那么添加这个的正确方法是什么呢?我正在寻找一些可以使用 http://localhost:8080/foo/person/search?q=erik

这是我的UrlMappings:

static mappings = {
    "/$controller/$action?/$id?(.${format})?"{
        constraints {
            // apply constraints here
        }
    }


    "/rest/persons"(resources:'Person')

我已将上面的内容改为:

def search() {
    println params
}

这不会再给出编译错误,但我仍然得到这个错误:

TypeMismatchException occurred when processing request: [GET] /declaratie-web/rest/medicaties/search - parameters:
q: erik
Provided id of the wrong type for class nl.Person. Expected: class java.lang.Long, got class java.lang.String. Stacktrace follows:
org.hibernate.TypeMismatchException: Provided id of the wrong type for class nl.Person. Expected: class java.lang.Long, got class java.lang.String

我还发现,如何调用控制器并不重要:

http://localhost:8080/foo/person/search?q=erik
http://localhost:8080/foo/person/search222?q=erik
http://localhost:8080/foo/person/search39839329?q=erik

由于上述错误,所有方法都失败了,因此似乎我的方法被忽略了(可能是由我的URLmapping引起的?

共有2个答案

太叔鸿
2023-03-14

@james-kleeh解决方案是正确的,但您可以通过重写listAllResources方法来做得更干净,该方法由index调用

@Override
protected List<Payment> listAllResources(Map params) {
    Person.createCriteria().list(params) {
        // Your criteria here with params.q
    }
}
习宸
2023-03-14

你这样做真的不太舒服q应该只是索引操作的参数。您可以重写该方法以包含您的功能。

def index(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    def c = Person.createCriteria()
    def results = c.list(params) {
       //Your criteria here with params.q
    }
    respond results, model:[personCount: results.totalCount]
}
 类似资料:
  • 我有一个部分在我的wordpress主题我从零开始,在那部分我有一个标题,标语和描述。 我使用以下方式显示它们: 标题: 标语: 我需要一种方式,用户可以写一个较长的网站描述和显示它。 我只在谷歌上找到了如何添加元描述,但那不是我想要的。

  • 问题内容: ng-model上的角ng-change传递给子指令 基本上,我希望能够将ng-model从父指令传递给子指令。我只能使用2向绑定值,但是这样我将无法在child元素的parent指令中使用ng- change。我也可以使用ng-click,但这不适用于非单击式更改(例如,文本区域而不是复选框)。所以我想知道是否有一种方法可以使自定义指令具有ng- model / ng- change

  • 问题内容: 这是我目前拥有的东西,不幸的是,我似乎无法弄清楚如何使用jQuery-UI …它曾经与直接的Autocomplete.js一起使用 我在后端的JSON看起来像这样 我使用了这里的答案来使mustMatch正常工作,但是不幸的是,如果我在输入框中“跳格”,或者如果我完全键入单词而不是实际选择建议的文本,那么我会得到“没有选择”响应,而不是值和ID。 当您实际上没有选择字段时,有人知道如何

  • 问题内容: 我正在使用一个简单的消息传递系统,并且需要将以下内容添加到Tkinter文本小部件中: 拼写检查 更改字体的选项(在选定的文本上) 更改字体颜色的选项(在选定的文本上) 更改字体大小的选项(在选定的文本上) 我了解tkinter文本小部件可以通过标记机制使用多种字体和颜色,但是我不知道如何利用这些功能。 如何使用“文本”小部件的功能实现这些功能?具体来说,如何更改字体系列,单词的颜色和

  • 问题内容: 我想写一个Naive Base文本分类器。由于sklearn不接受“文本格式”功能,因此我正在使用TfidfVectorizer对其进行转换。 我仅使用转换后的数据作为特征就能够成功创建此类分类。代码如下: 一切都按预期工作,但是当我想添加其他功能时遇到问题。指示天气的标志,给定的文本包含某个关键字。我尝试了多种方法来正确地转换“ url”功能,然后将转换后的功能与另一个布尔功能组合在

  • 这与我的问题相反,在OpenDayLight中安装自定义功能或模块?。我希望使用Hello World应用程序并添加以下功能的: ODL-RestConf ODL-MDSal-APIDOCS ODL-openflowplugin-flow-services ODL-openflowplugin-app-table-miss-enforcer ODL-OpenFlowPlugin-NXM-Exten