尝试执行具有多个参数的POST请求时遇到问题。这是我用打字稿写的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 }
);
}
当我在控制台中打印时,我设法在这里获取数据。
但是,当我将数据传递给用Java编写的控制器时,参数变为空:
@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
}
我不确定为什么在service.ts上打印出数据,但是当将其传递给控制器时却变为空。有什么想法吗?
谢谢!
答案 0 :(得分:0)
您可以打开Chrome开发工具,转到“网络”标签,然后检查POST,以了解angular是否确实将正确的东西传递给了正确的端点。这将告诉您问题是客户端还是服务器端。
编辑:
看起来您的服务器可能期望使用字符串数组,但是您正在发送对象。在javascript中,当您执行{var1, var2}
时,这只是{var1: var1Value, var2: var2Value}
的简写
编辑2:我抬起头来,看起来好像您使用的@RequestBody
错误。看来您应该将其传递给可以反序列化JSON的类,例如
public class RequestData {
private String[] packageIds;
private Date date;
// ...
}
您还已经将数据放在顶级变量params
下,因此您希望将其删除并将所有内容放在对象的顶级。
请尝试通读本教程以获取更多信息:https://www.baeldung.com/spring-request-response-body
答案 1 :(得分:0)
两个类的属性名称可能不同。
class A{
// class in springboot
private String name;
}
class A {
//class in angular
data: String;
}
在这种情况下,属性名称是服务器端空指针异常的主要原因。