gpt4 book ai didi

java - 对 Spring Boot 的 Angular HTTP POST 请求导致空值

转载 作者:行者123 更新时间:2023-12-02 01:54:51 28 4
gpt4 key购买 nike

我在尝试使用多个参数执行 POST 请求时遇到一些问题。这是我用 typescript 编写的 service.ts 类:

   retrieve(packageId: any[], date: any) {
console.log(packageId);
console.log(date);
let packgeIdStr: string = JSON.stringify(packageId);
const data = { stringArrDo: packgeIdStr, date: date };
const url = this.serviceAPI + '/...../retrieve';
return this.http.post<SRFDO[]>(
url,
{ params: data }
);
}

当我在控制台中打印时,我设法在这里获取数据。

enter image description here

但是,当我将数据传递给用 Java 编写的 Controller 时,参数变为空:

@PostMapping("/retrieve")
public DO[] retrieve(@RequestBody String stringArrDo, java.sql.Date date)
throws RemoteException, JaMClientRemoteException, JaMException {
System.out.println(stringArrDo);
System.out.println("date :"+ date);
// removed code
}

enter image description here

我不确定为什么数据在 service.ts 中打印出来,但是当将其传递到 Controller 时,数据就变成了空。有什么想法吗?

谢谢!

最佳答案

您可以打开 Chrome 开发工具,转到“网络”选项卡,然后检查您的 POST,看看 Angular 是否确实将正确的内容传递到正确的端点。这将告诉您问题是客户端还是服务器端。

编辑:看起来您的服务器可能需要一个字符串数组,但您正在发送一个对象。在 javascript 中,当您执行 {var1, var2} 时,这只是 {var1: var1Value, var2: var2Value}

的简写

编辑2:我查找了spring,看起来您错误地使用了@RequestBody。看起来您应该向它传递一个可以将 JSON 反序列化成的类,例如

public class RequestData {
private String[] packageIds;
private Date date;
// ...
}

您还将数据放在顶级变量 params 下,因此您需要将其删除并将所有内容放在对象的顶层。

尝试阅读本教程以获取更多信息:https://www.baeldung.com/spring-request-response-body

关于java - 对 Spring Boot 的 Angular HTTP POST 请求导致空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57403384/

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