0

私は次のような非常にシンプルな安らかなコントローラーを持っています:

class PersonController extends RestfulController<Person> {

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

    PersonController() {
        super(Person)
    }
}

ただし、これに検索オプションを追加したいと思います。これを可能にするGrailsの方法は何ですか?

以下を追加することを考えました:

def search(Map params) {
    println params
}

しかし、それは Grails (2.3) をクラッシュさせます (| コンパイル中にエラー 致命的なエラー org.apache.tools.ant.BuildException: Compilation Failed (Use --stacktrace to see the full tr​​ace))。

では、これを追加する正しい方法は何ですか? を使用して呼び出すことができるソリューションを探しています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

上記のエラーですべて失敗するため、私のメソッドは無視されているようです (おそらく URL マッピングが原因でしょうか?)

4

2 に答える 2