如何正确读取发送到后端的复杂对象



编辑:经过一些技巧,我编辑了我的代码,现在我创建了一个对象,它包含了我想要的所有数据,所以现在我有了一个由int和另一个内部有数组的对象的数组组成的对象这是对象的代码:

export class tempfp{
mesi: fp[] = []
id:number=0;}

export class fp{
arr:number[]=new Array();}

这是我以前将数据发送到后端的做法(注意,对象数据具有任何类型,并且对象发送是tempfp)

async onSubmit() {
console.log("start: n"+JSON.stringify(this.data))
for (let i = 0; i < this.data.length; i++) {
let m = new fp();
Object.assign(m.arr, JSON.stringify(this.data[i]));
this.send.mesi[i] = m;
}
this.send.id=this.id;
this.efp.postarray(this.send)//i even tried to put in this function this.data instead of this.send
}}

在我的后端,我有相同的对象,但当我使用http post发送数据时,它没有正确读取数据——事实上,当我试图从后端操作数据时,我在浏览器中收到错误500,如果我试图在后端打印这个东西,它看起来是空的

一个post请求只能有一个body,并且您已经在传递一个body了,您需要做的是用java创建一个模型来表示您想要传递的body,然后从前端传递它。

//I like to use lombok's @Data annotation to generate getters setters 
//and default constructor but you can also write them by hand
@Data 
public class MyBody {
private String eff;
private int id;
}

然后在您的控制器中,您将接受该模型的一个实例。

@PostMapping("takearrfp")
public void takearr(@RequestBody MyBody body) {
String eff = body.getEff();
int id = body.getId(); //And then do what you want whit this
efps.readAndSave(eff);
}

在这一点上,剩下的唯一事情就是将这个模型作为主体传递,所以您需要将一个具有相同字段的对象作为请求后的主体传递

{
eff: put something here,
id: put the id here
}

您要做的很简单。正如另一个答案所说,你一次只能通过一个身体。因此,如果要包含id,则必须将其放入正文中。只需尝试以下代码

const  body = {
id: id,
arr: arr
}
const obj = JSON.stringify(body)

然后你可以使用法布里齐奥的答案中建议的方法从后端读取这些数据

相关内容

最新更新