Angular POST方法只发送一个JSON数组

问题描述 投票:0回答:2

我有一个与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可以做到这一点吗?

json angular post angular-httpclient
2个回答
0
投票

使用这个片段

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)

0
投票

我看到你有一个对象类型[key:value],key是索引,value是一个元素实体。

Object.values(elements) //send this
© www.soinside.com 2019 - 2024. All rights reserved.