【问题标题】:Angular HTTP POST request to spring boot resulting in null value对 Spring Boot 的 Angular HTTP POST 请求导致空值
【发布时间】:2019-12-15 14:54:26
【问题描述】:

我在尝试使用多个参数执行 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 }
    );
}

当我在控制台中打印出来时,我设法在此处获取数据。

但是,当我将数据传递给用 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 中打印出来,但是当将其传递给控制器​​时,它变成了 null。有什么想法吗?

谢谢!

【问题讨论】:

    标签: java angular spring-boot post


    【解决方案1】:

    两个类的属性名可能不同。

    class A{ 
         // class in springboot
         private String name;
       }
    
    
    
     class A { 
    //class in angular 
    data: String; 
    }
    

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

    【讨论】:

      【解决方案2】:

      您可以打开您的 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

      【讨论】:

      • 它说 500 内部服务器错误。我检查了请求负载,参数实际上填充了我在控制台中打印的值。
      • 我在想这可能是导致此问题的控制器参数类型不同的原因吗?
      • 所以听起来问题出在服务器端,因为您得到了 500。您的服务器应该告诉您实际错误是什么,以便您可以在 500 响应中或在您的日志。
      • 另外,您可能期待错误的数据类型。查看我的编辑。
      • 嘿,我更新了我的问题。你介意看看吗?
      猜你喜欢
      • 2021-03-06
      • 1970-01-01
      • 2014-08-30
      • 2015-09-30
      • 2020-05-09
      • 1970-01-01
      • 2020-05-30
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多