春季启动的角度HTTP POST请求导致空值

时间:2019-08-07 23:27:32

标签: java angular spring-boot post

尝试执行具有多个参数的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 }
    );
}

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

enter image description here

但是,当我将数据传递给用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
}

enter image description here

我不确定为什么在service.ts上打印出数据,但是当将其传递给控制器​​时却变为空。有什么想法吗?

谢谢!

2 个答案:

答案 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; 
}

在这种情况下,属性名称是服务器端空指针异常的主要原因。