2

Json 配列を Grails コントローラーに渡してから Java クラスに渡そうとしています。ただし、params を Java クラスに適切に渡す方法がわかりません。これが関連コードです。

AJAX 投稿:

  $('#matrixForm').submit(function(e) {
        e.preventDefault();

    var matrixArray = $(this).serializeArray();

    $.ajax({  
        type: "POST",  
        data: matrixArray,  
        url: "/turingpages/factorize/create",
        success: function(data) {
            //USE DATA
        }  
    });  
    }); 

Grails コントローラー:

...
    def create() {

        MatrixFactorization m = new MatrixFactorization(params)
        Gson gson = new Gson()
        def jsonMatrix = gson.toJson(m.answer)
        render jsonMatrix
    }
...

MatrixFactorization コンストラクター:

public MatrixFactorization(JsonElement jsonarray) {
    BlockRealMatrix R = GsonMatrix.toMatrix(jsonarray);
    this.run(R);
}

コンソールに Json 配列が次のように表示されます。

[{name:"00", value:"1"}, {name:"01", value:"2"}, {name:"02", value:"3"}, {name:"10", value:"4"}, {name:"11", value:"0"}, {name:"12", value:"4"}, {name:"20", value:"0"}, {name:"21", value:"4"}, {name:"22", value:"2"}] 

私のスタックトレースは次のとおりです。

| Error 2013-01-18 00:30:23,792 [http-bio-8080-exec-4] ERROR errors.GrailsExceptionResolver  - GroovyRuntimeException occurred when processing request: [POST] /turingpages/factorize/create - parameters:
21: 4
20: 0
10: 4
22: 2
00: 1
01: 2
11: 0
02: 3
12: 4
failed to invoke constructor: public matrices.MatrixFactorization(com.google.gson.JsonElement) with arguments: [] reason: java.lang.IllegalArgumentException: wrong number of arguments. Stacktrace follows:
Message: failed to invoke constructor: public matrices.MatrixFactorization(com.google.gson.JsonElement) with arguments: [] reason: java.lang.IllegalArgumentException: wrong number of arguments
    Line | Method
->>   15 | create    in turingpages.rest.MFController$$ENuqtska
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    195 | doFilter  in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter  in grails.plugin.cache.web.filter.AbstractFilter
|   1110 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    603 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run       in java.lang.Thread

JSONの使用は初めてです。どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

3

1.1。

jQueryは、デフォルトでこのデータをJSONではなくリクエストパラメーターとして渡します。したがって、jQueryに渡すJSON文字列を作成する必要があります。JSON3ライブラリをお勧めします。この場合、次のようになります。

$.ajax({  
    type: "POST",  
    data: JSON.stringify(matrixArray),  
    url: "/turingpages/factorize/create",
    success: function(data) {
        //USE DATA
    }  
});  

2.2。

サーバー側では、標準のGrails JSONコンバーターを使用することもできます(ただし、必要に応じてGsonを使用することもできます)。http://grails.org/Converters+Referenceを参照してください

この場合、あなたは使用することができます

def create() {
    MatrixFactorization m = new MatrixFactorization(request.JSON)
    render m.answer as JSON
}
于 2013-01-18T08:21:55.627 に答える