【问题标题】:Symfony FOSRestBundle API - receives empty JSON Request bodySymfony FOSRestBundle API - 接收空的 JSON 请求正文
【发布时间】:2020-11-09 18:36:31
【问题描述】:

我正在尝试使用捆绑包构建 Symfony API,但我发送的每个请求的正文都是空的。

控制器:

class IndexController extends AbstractFOSRestController
{
    /**
     * @Rest\Post("/api/test", methods={"POST"})
     * @param Request $request
     * @return View
     */
    public function testError(
        Request $request
    ) : View {

        $requestData = $request->request->all(); // problem: requestData is []

        return View::create()
            ->setStatusCode(200)
            ->setFormat("json")
            ->setData(["data" => $requestData, "status" => "ok"]);
    }
}

我从 CURL 发送这个请求:

curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" -X POST http://localhost:8000/api/test

我也试过用 Postman 发送。我收到此回复:

{"data":[],"status":"ok"}

这是我的 fos_rest.yaml 文件:

fos_rest:
    view:
        view_response_listener: true
    format_listener:
        rules:
            - { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json, html ] }
            - { path: ^/, prefer_extension: true, fallback_format: json, priorities: [ html, json ] }

【问题讨论】:

    标签: php json api symfony


    【解决方案1】:

    我认为您忘记了正确的序列化程序,这是最需要的。 这是我的配置,应该可以帮助你:

    fos_rest:
        serializer:
            serialize_null: true
        body_listener:
            enabled: true
            throw_exception_on_unsupported_content_type:  true
            decoders:
                json: fos_rest.decoder.json
        format_listener:
            rules:
                - { path: '^/api', priorities: ['json'], fallback_format: json, prefer_extension: false }
                - { path: '^/', priorities: ['html', '*/*'], fallback_format: html, prefer_extension: true }
        param_fetcher_listener: force
        view:
            view_response_listener: 'force'
            formats:
                json: true
        allowed_methods_listener: true
    services:
        fos_rest.decoder.json:
            class: FOS\RestBundle\Decoder\JsonDecoder
            public: true
    

    手动

    Symfony: Setting up the bundle, part B

    【讨论】:

    • 由于其他地方发生了一些事情,请允许我让您了解垃圾邮件的模式,这些邮件被伪装成感谢您不回答。他们需要在不采取任何其他措施的情况下将其标记为垃圾邮件。
    【解决方案2】:

    编辑:修复它的一种方法是接受的答案,另一种是下面的代码

    $requestData = json_decode($request->getContent(), true);
    
    return View::create()
            ->setStatusCode(200)
            ->setFormat("json")
            ->setData(["data" => $requestData, "status" => "ok"]);
    

    【讨论】:

      猜你喜欢
      • 2015-07-11
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 2018-08-19
      • 2018-11-28
      • 1970-01-01
      相关资源
      最近更新 更多