Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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从React传递到Spring控制器_Java_Json_Spring_Reactjs - Fatal编程技术网

Java 将JSON从React传递到Spring控制器

Java 将JSON从React传递到Spring控制器,java,json,spring,reactjs,Java,Json,Spring,Reactjs,所以我尝试使用fetch发送一些数据 console.log(results.data); 结果。数据是我试图发送的内容。上面的代码在控制台中提供了以下信息: [阵列[52],阵列[52],阵列[52],阵列[52],阵列[52],阵列[52],阵列[52], 数组[52],数组[52],数组[52],数组[52],数组[52],数组[52],数组[52], 数组[52],数组[52],数组[52],数组[1]] 这让我相信,我应该期望控制器中有一个String[][] 这是react代码:

所以我尝试使用fetch发送一些数据

console.log(results.data);
结果。数据是我试图发送的内容。上面的代码在控制台中提供了以下信息:

[阵列[52],阵列[52],阵列[52],阵列[52],阵列[52],阵列[52],阵列[52], 数组[52],数组[52],数组[52],数组[52],数组[52],数组[52],数组[52], 数组[52],数组[52],数组[52],数组[1]]

这让我相信,我应该期望控制器中有一个
String[][]

这是react代码:

fetch('/device', {
  method: 'post',
  headers: {
    'Accept': 'application/json, text/plain, */*',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({data : results.data})
}).then(res=>res.json())
  .then(res => console.log(res));
和控制器:

@RequestMapping(value= "/deviceIngestion", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String deviceIngestion (@RequestParam(value = "data[][]") String[][] data) {

    return data [0][0];
}
但我在控制台中得到了这样的响应:

已解决由处理程序执行引起的异常:org.springframework.web.bind.MissingServletRequestParameterException:必需字符串[][]参数“数据[][]”不存在

我在尝试其他方法后也遇到了这个错误:

“无法读取文档:无法反序列化START\u对象标记之外的java.lang.String[][]实例。”↵ 在[来源:java.io。PushbackInputStream@2f36dd94;行:1,列:1];嵌套异常为com.fasterxml.jackson.databind.JsonMappingException:无法反序列化START_对象标记之外的java.lang.String[]实例↵ 在[来源:java.io。PushbackInputStream@2f36dd94;行:1,列:1]“ 路径 : “/deviceIngestion” 地位 : 400 时间戳 : 1513693466676 名字

我还尝试在构造函数中使用
ArrayList
创建一个类,以替换我在控制器中使用的
String[][]
,但没有成功


任何帮助都将不胜感激,谢谢

您正在请求正文中发送数据,因此在您的控制器中,您应该尝试
public@ResponseBody String deviceingstion(@RequestBody String[][]data).
尽管我自己不相信这会起作用,但值得一试或玩玩

更新您的pojo应该如下所示:

public class DataObject {
    String[][] data;
    public String[][] getData() {
        return data;
    }
    public void setData(String[][] data) {
        this.data = data;
    }    
}
public @ResponseBody String deviceIngestion (@RequestBody DataObject data)...
控制器应该是这样的:

public class DataObject {
    String[][] data;
    public String[][] getData() {
        return data;
    }
    public void setData(String[][] data) {
        this.data = data;
    }    
}
public @ResponseBody String deviceIngestion (@RequestBody DataObject data)...
body:JSON.stringify({data:results.data})

@RequestParam(value=“data[][])

1) 您正在传递数据,但控制器需要数据[][]

2) 如果您传递字符串[],那么您应该像
body:JSON.stringify(results.data)
not
body:JSON.stringify({data:results.data})
。但是,如果您必须使用原始表单,那么您可以尝试创建一个包装类,如

public class Body {
   private String[][] data;
}
并在控制器中使用它,如

@RequestMapping(value= "/deviceIngestion", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String deviceIngestion (@RequestBody Body body) {
    String[][] data = body.getData();
    return data[0][0];
}

问题似乎是Java无法理解JSON的格式,即:
[[x,y],[a,b]
为了解决这个问题,我将JSON更改为一个对象数组
[{x:x,y:y},{x:a,y:b}]

之后,我创建了一个Java类,该类与存储在JSON数组中的对象相匹配,并将控制器更改为:

@PostMapping("/device")
public String deviceIngestion (@RequestBody List<DeviceData> devices) throws IOException{
    return "success";        
}
@PostMapping(“/device”)
公共字符串deviceIngestion(@RequestBody List devices)引发IOException{
返回“成功”;
}

这是我最初尝试的,它给出了我提到的第二个错误,尽管我认为这离解决方案更近了一步,感谢您发布results.data的实际JSON,而不是控制台日志,这可能会有帮助,也可能没有帮助!它包含公司敏感数据,所以没有,但它只有一个数组,其中包含16个字符串数组,每个数组中有52个字符串。如果我错了,请更正我。您发送的对象包含一个名为data的字段,其中包含16个数组,每个数组包含52个字符串对象?如果是这种情况,那么字符串[][]数据是不正确的。是的,我认为这是正确的,字符串[][]应该替换为什么?您是否尝试过不执行JSON。stringify(…)并按原样传递对象?另一个选项是显式声明
consumes=MediaType.APPLICATION_JSON_UTF8_VALUE
(而不是products)在@RequestMapping中