gpt4 book ai didi

java - 将 JS 数组作为 List<> 传递给 Spring MVC Controller

转载 作者:行者123 更新时间:2023-12-01 18:18:32 29 4
gpt4 key购买 nike

我正在使用 ReactJs 开发我的 web 应用程序的前端。在这里,我创建了一个 API POST,传入一个对象数组。

对象是在事件处理程序中创建的,如下所示:

eventHandler(id1, id2, e) {
let payload = this.state.payload;
let changedItem= {
changeTo: e,
id1: id1,
id2: id2
};

let res = [];
payload.forEach(item=> {
if (item.id1 !== id1
|| item.id2 !== id2) {
res.push(control);
}
});
res.push(changedItem);

this.setState({
payload: res
});
}

我已经通过在此之后打印数组来验证它的工作原理。接下来,我进行 POST 调用,传入数组:

onClick() {

let changedControls = (this.state.payload);

updateControls(changedControls).then(() => {
this.setState({
payload: []
});
}).catch((error) => {
console.log(error);
})
}

API 调用在单独的文件中定义,如下:

export const updateControls = (changedControls) => {
let uri = '/api/update-controls';
return new Promise((resolve, reject) => {
axios.post(uri, changedControls).then(response => {
if (response != null) {
resolve(response.data)
}
}).catch(err => {
console.log(err.response.data);
})
})

};

理想情况下,下一步是调用我的 Java Controller ,定义为:

@RequestMapping(value = "/update-controls", method = RequestMethod.POST)
public void updateControls(@RequestParam(value = "updatedControls") List<ControlsUpdate> updatedControls) throws Exception {
initServiceClientRest();
String user = getUserId();

ResponseEntity responseEntity = serviceClientRest.update(updatedControls, user);

if (responseEntity != null) {
if (responseEntity.getStatusCode() != HttpStatus.OK) {
throwErrorMessages(responseEntity);
}
}
}

我相信这就是错误所在。我收到 400 错误,提示:必需的列表参数“updatedControls”不存在”。

有什么建议吗?

编辑:对 API POST 调用中的拼写错误表示抱歉!但这不是问题,只是我在复制代码时犯的错字

编辑2:

错误:

feign.FeignException$InternalServerError: status 500 reading serviceClientRest#updateAccessControls(List,String)
at feign.FeignException.errorStatus(FeignException.java:114) ~[feign-core-10.2.3.jar:na]
at feign.FeignException.errorStatus(FeignException.java:86) ~[feign-core-10.2.3.jar:na]
at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:93) ~[feign-core-10.2.3.jar:na]
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:149) ~[feign-core-10.2.3.jar:na]
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:78) ~[feign-core-10.2.3.jar:na]
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103) ~[feign-core-10.2.3.jar:na]
at com.sun.proxy.$Proxy155.updateAccessControls(Unknown Source) ~[na:na]
at ScoringConfigController.updateControls(ScoringConfigController.java:135) ~[main/:na]

最佳答案

您将数组作为请求正文发送,对吗?您必须使用 @RequestBody 而不是 @RequestParam

public void updateControls(@RequestBody List<ControlsUpdate> updatedControls) throws Exception {...}

@RequestParam 用于 URL 查询字符串

关于java - 将 JS 数组作为 List<> 传递给 Spring MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60321467/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com