我有一个非常简单的 restful 控制器,它看起来像这样:
class PersonController extends RestfulController<Person> {
static responseFormats = ['json', 'xml']
PersonController() {
super(Person)
}
}
但是,现在我想为此添加一个搜索选项。使这成为可能的 Grails 方法是什么?
我想添加以下内容:
def search(Map params) {
println params
}
但这会使 Grails (2.3) 崩溃(| Error Fatal error during compilation org.apache.tools.ant.BuildException: Compilation Failed (Use --stacktrace to see the full trace))。
那么添加这个的正确方法是什么?我正在寻找一些我可以调用的解决方案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 引起的?)