[英]Angular HTTP POST request to spring boot resulting in null value
我在嘗試使用多個參數執行 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 打印出數據,但是當將它傳遞給控制器時,它變成了空。 有任何想法嗎?
謝謝!
您可以打開 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
兩個類的屬性名稱可能不同。
class A{
// class in springboot
private String name;
}
class A {
//class in angular
data: String;
}
在這種情況下,屬性名稱是服務器端空指針異常的主要原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.