httpClient Symfony 中的 Json 选项抛出错误

Posted

技术标签:

【中文标题】httpClient Symfony 中的 Json 选项抛出错误【英文标题】:Json option in httpClient Symfony throw error 【发布时间】:2022-01-13 13:55:52 【问题描述】:

我在 symfony 上使用 httpClient,我正在调用一个 API 我想使用 json 选项而不是使用 body 但它不起作用,当我使用 body 并输入 json 格式时,一切正常,但我觉得它不干净,所以我不想使用 json 选项只有简单的变量,如 json => ['var1' => 'value1, 'var2' => 'value2'...]

但是一旦我使用数组,它就无法工作,并且我收到了这个错误:

The type of the key "firstname" must be "int", "string" given.

在下面查看我的代码

$procedure = $this->httpClient->request(
        'POST',
        "https://fakeurl.com",
        [
          'headers' =>
            [
              'Accept' => 'application/json',
              'Content-Type' => 'application/json',
            ],
          'auth_bearer' => "key",
          'json' => [
            "name" => "name",
            "description" => "description",
            "start"  => true,
            "members" => [
                "firstname" => $user->getFirstName(),
                "lastname" => $user->getLastName(),
                "email" => $user->getEmail(),
                "phone" =>"+3312345678",
                "fileObjects" => [
                  "file" =>$file['id']
               ]
             ]
          ]
        ]
      );

【问题讨论】:

您尝试过什么解决问题的方法? Symfony 本身会抛出该错误,还是您使用的 API 会抛出该错误? 不多,我认为这可能不是正确的语法,但我不知道。是的,是 Symfony 引发了这个错误但是如果我使用 body 参数,它再次完美运行 显示User::class getFirstname()方法 公共函数 getFirstName(): ?string return $this->firstName; 【参考方案1】:

我刚刚找到了解决方案,适当的“成员”期望一个数组,所以正确的方法是这样的:

$procedure = $this->httpClient->request(
        'POST',
        "https://fakeurl.com",
        [
          'headers' =>
            [
              'Accept' => 'application/json',
              'Content-Type' => 'application/json',
            ],
          'auth_bearer' => "key",
          'json' => [
            "name" => "name",
            "description" => "description",
            "start"  => true,
            "members" => [[
                "firstname" => $user->getFirstName(),
                "lastname" => $user->getLastName(),
                "email" => $user->getEmail(),
                "phone" =>"+3312345678",
                "fileObjects" => [[
                  "file" =>$file['id']
               ]]
             ]]
          ]
        ]
      );

【讨论】:

以上是关于httpClient Symfony 中的 Json 选项抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

使用HttpClient+Json解析器爬取数据并存入数据库

Android JSON HttpClient 使用 HttpResponse 将数据发送到 PHP 服务器

Apache HttpClient API 中的 CloseableHttpClient 和 HttpClient 有啥区别?

AsyncTask 中的httpClient 需要wakeLock 吗?

如何检查请求是不是是 Symfony2 或 Symfony3 中的 POST 或 GET 请求

如何在 Jersey Invocation Builder 中使用 PATCH 方法?