所以我尝试使用fetch发送一些数据。
console.log(results.data);
results.data
是我要发送的内容。上面的代码在控制台中给出了以下内容:
[Array [52],Array [52],Array [52],Array [52],Array [52],Array [52], Array [52],Array [52],Array [52],Array [52],Array [52],Array [52], 数组[52],数组[52],数组[52],数组[1]]
这让我相信我应该期待控制器中的String[][]
这是反应代码:
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];
}
但是我在控制台中得到了这个回复:
由Handler执行导致的已解决异常:org.springframework.web.bind.MissingServletRequestParameterException:必需String [] []参数' data [] []'不存在
我在尝试其他一些事情后也遇到了这个错误:
"无法读取文档:无法在[来源:java.io.PushbackInputStream@2f36dd94;中的START_OBJECT令牌中反序列化java.lang.String [] []的实例。 line:1,column:1];嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无法在[来源:java.io.PushbackInputStream@2f36dd94;中的START_OBJECT令牌中反序列化java.lang.String [] []的实例。 line:1,column:1]" 路径 : " / deviceIngestion" 状态 : 400 时间戳 : 1513693466676 名称
我还尝试在构造函数中创建一个ArrayList<String[]>
的类来替换我在控制器中使用的String[][]
,但没有运气。
非常感谢任何帮助,谢谢
答案 0 :(得分:0)
您正在请求正文中发送数据,所以在您的控制器中,您应该尝试public @ResponseBody String deviceIngestion (@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)...
答案 1 :(得分:0)
body: JSON.stringify({data : results.data})
@RequestParam(value = "data[][]")
1)您正在传递数据,但控制器需要 data [] []
2)如果你传递String [] []那么你应该发送它
body: JSON.stringify(results.data)
不是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];
}
答案 2 :(得分:0)
问题似乎是Java无法理解JSON所处的格式,即:
[[x,y],[a,b]]
为了解决这个问题,我将JSON更改为一个对象数组
[{x:x, y:y},{x:a,y:b}]
see this
之后我创建了一个Java类,它与存储在JSON数组中的对象相匹配,并将控制器更改为以下内容:
@PostMapping("/device")
public String deviceIngestion (@RequestBody List<DeviceData> devices) throws IOException{
return "success";
}