Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Json作为Grails控制器的参数_Java_Jquery_Ajax_Json_Grails - Fatal编程技术网

Java Json作为Grails控制器的参数

Java Json作为Grails控制器的参数,java,jquery,ajax,json,grails,Java,Jquery,Ajax,Json,Grails,我试图将Json数组传递给Grails控制器,然后传递给Java类。但是,我不知道如何正确地将参数传递给Java类。这是相关代码 阿贾克斯邮报: $('#matrixForm').submit(function(e) { e.preventDefault(); var matrixArray = $(this).serializeArray(); $.ajax({ type: "POST", data: matrix

我试图将Json数组传递给Grails控制器,然后传递给Java类。但是,我不知道如何正确地将参数传递给Java类。这是相关代码

阿贾克斯邮报:

  $('#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
    }
...
矩阵工厂化构造函数:

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非常陌生。感谢您的帮助。谢谢。

1

默认情况下,jQuery将此数据作为请求参数传递,而不是JSON。因此,您应该构建一个JSON字符串来传递给jQuery。我可以推荐你。在这种情况下,它将是:

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

在服务器端,您还可以使用标准的GrailsJSON转换器(但如果愿意,您可以使用Gson),请参阅

在这种情况下,您可以使用

def create() {
    MatrixFactorization m = new MatrixFactorization(request.JSON)
    render m.answer as JSON
}

当我使用stringify时,我的request.JSON是一个空对象:
[15:52:12.302]{“array”:[[1,2,3],[3,4,5],[5,6,7]}@http://localhost:8080/turingpages/js/dataFeed.js:15 [15:52:12.499]邮政http://localhost:8080/turingpages/factorize/create [HTTP/1.1200OK 18ms][15:52:12.528]{} @ http://localhost:8080/turingpages/js/dataFeed.js:22
上面的日志是请求前数组的打印输出和返回的打印输出。在grails控制器中,我只是返回request.JSONTry以添加
contentType:'application/json'
dataType:'json'
选项