我有一个与Spring REST API通信的Angular前端。Spring端点期望一个JSON数组,但是通过Angular HttpClient POST方法,我不知道如何只发送一个JSON数组。现在我得到了HTTP错误代码400(Bad request)。
我需要向端点发送什么(这在API测试器中已经测试过了,并且可以工作)。
[
{
"date": "2020-05-26T02:00:00.000Z",
"blocked": false,
"reservation": null
},
{
"date": "2020-05-27T00:00:00.000Z",
"blocked": true,
"reservation": null
}
]
我现在发送的方式发生了变化。
modifyElements(id: number, elements: Element[]): Observable<Element[]> {
return this.http.post<Element[]>(this.baseUrl + '/modify/' + id, elements);
}
HttpClient的put方法发送的数据结构如下。
{
"0": {
"date": "2020-05-26T02:00:00.000Z",
"blocked": false,
"reservation": null
},
"1": {
"date": "2020-05-27T00:00:00.000Z",
"blocked": true,
"reservation": null
}
}
我也试过,而且更接近我的需求。
this.http.post<Element[]>(this.baseUrl + '/modify/' + id, {elements: elements});
这个发送的是:
"elements": [
{
"date": "2020-05-26T02:00:00.000Z",
"blocked": false,
"reservation": null
},
{
"date": "2020-05-27T00:00:00.000Z",
"blocked": true,
"reservation": null
}
]
这仍然不被API接受,结果是同样的错误。
请帮助我如何才能以正确的结构发送数据,只是一个JSON数组。
我已经知道如何才能在Spring中解决这个问题:在控制器方法中期待一个新类的请求体,该类只有一个成员,这是一个集合,但这不是一个很好的解决方案。
我想知道,在Angular这边,没有变通的情况下,如何做到这一点。
编辑:
谢谢你到目前为止的回答,但是它们返回的是我的数组,结构是一样的.我在问题中插入的数据结构是Angular的HttpClient发送的请求体,是从Chrome DevTools中复制过来的.我认为问题不在于我原来的数组,而在于HttpClient如何创建它发送的JSON。 在我看来,它似乎不能将一个数组解释为一个简单的JSON数组,只能将一个JSON数组作为键值对发送,值就是JSON数组。问题是,HttpClient可以做到这一点吗?
使用这个片段
modifyElements(id: number, elements: Element[]): Observable<Element[]> {
const elementsArray = Object.assign([], elements);
return this.http.post<Element[]>(this.baseUrl + '/modify/' + id, elementsArray );
}
这将转换为所需的格式
var a ={
"0": {
"date": "2020-05-26T02:00:00.000Z",
"blocked": false,
"reservation": null
},
"1": {
"date": "2020-05-27T00:00:00.000Z",
"blocked": true,
"reservation": null
}
}
var c = Object.assign([], a)
console.log(c)
我看到你有一个对象类型[key:value],key是索引,value是一个元素实体。
Object.values(elements) //send this