簡體   English   中英

對 Spring Boot 的 Angular HTTP POST 請求導致空值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM