错误400所需的请求正文丢失

时间:2019-11-29 09:37:51

标签: angular typescript api spring-boot kotlin

我有一个用Kotlin编写的Spring Boot REST端点,例如:

@GetMapping(value="/transferDetails")
private fun transferAccountDetails(@RequestBody transferAcctDetails: TransferAccountDetails):results{

    /** Hidden logic*/

    return results(true,"Details Transferred Successfully")
}

//region Data View classes for HTTP response are defined here
data class TransferAccountDetails(val ownerKey: String, val counterPartyKey: String, val acctId: String)

上述端点所做的仅仅是从请求主体中获取参数,并对数据库进行一些更改,最终返回成功消息。

假设我无法更改用于此终结点的行为或请求类型(例如POSTPathVariable),并且上述脚本是最终的,并且已经过Postman的测试,并且可以正常工作。< / p>

在前端,我正在使用Angular并将请求发送到service中的上述端点,如下所示:

  processAccountDetailsUrl = 'http://.../api/transferDetails';

  processAccountDetails(ownerKey: string, counterPartyKey: string, acctId: string) {
    this.paramsDict = {
      ownerKey: { ownerKey},
      counterPartyKey: { counterPartyKey},
      acctId: { acctId }
    };

    this.requestOptions = {
      params: new HttpParams(this.paramsDict)
    };

    return this.http.get(this.processAccountDetailsUrl , this.requestOptions);
  }

我收到以下错误400:

{
    "timestamp": "2019-11-29T08:16:52.793+0000",
    "status": 400,
    "error": "Bad Request",
    "message": "Required request body is missing: private final com.template.webserver.results..."
    "path": "/api/transferAccountDetails"
}

不是requestOptionsGET请求添加请求正文的方法吗?如果是这样,我应该做些什么改变才能调用REST端点,它在哪里出错?假设我只能编辑前端,并且后端已经过测试,可以正常工作,并且不应该进行进一步的更改。

我尝试在TS文件中创建一个与data class TransferAccountDetails具有相同变量的接口,并尝试像return this.http.get(this.processAccountDetailsUrl , this.theInterfaceObject);那样解析它。这不起作用,因为它不是GET请求的类型。

1 个答案:

答案 0 :(得分:1)

不建议在获取请求上使用RequestBody:

HTTP GET with request body

https://github.com/angular/angular/issues/9927