【问题标题】:POST json returns 400 with curl but functional test workingPOST json 返回 400,curl 但功能测试正常
【发布时间】:2015-12-01 21:48:50
【问题描述】:

我正在尝试使用 Symfony2 和 FOSRestBundle 构建 API 的 POST。以下功能测试返回 OK。

 public function testPostArticleAction(){

        $this->client->request(
                'POST',
                '/api/v1/articles.json',
                array(),
                array(),
                array('CONTENT_TYPE' => 'application/json'),
                '{"articleContent":"The content of the content"}'
                );
        $response = $this->client->getResponse();

        $this->assertJsonResponse($response,201, false); 
    }

但是当我尝试通过 Curl 发送具有相同请求正文的请求时,它给了我一个 400 invalid json 消息:

{"code":400,"message":"收到无效的 json 消息"}

这是我尝试过的 curl 命令:

curl -X POST -d '{"articleContent":"title1"}' http://localhost:8000/api/v1/articles --header "内容类型:应用程序/json"

curl -X POST -d '{"articleContent":"title1"}' http://localhost:8000/api/v1/articles.json

请注意,GET 会返回给我一个 json,例如:

{"id":68,"article_content":"contents 内容"}

但在我的学说映射文件中,我的字段是 articleContent。我错过了什么? 非常感谢您的帮助。

【问题讨论】:

    标签: php json symfony post curl


    【解决方案1】:

    尝试将您的标题选项更新为:

    "Content-Type: application/json"
    

    此外 - 此请求是否需要任何类型的身份验证?如果是这样,您需要传入一个 auth cookie。

    【讨论】:

    • 我使用 Content-Type 无济于事。另外,当我删除它时,我现在得到一个 SQL 完整性约束违规错误(无法将 null 插入列)。然后我没有身份验证,(很明显,因为我什至可以到达数据库层)。我的头晕了,非常感谢您抽出宝贵的时间
    • 好的,听起来您需要传递一些额外的输入字段。你能看到表的结构吗?这可能会给你一些线索。此外,单元测试套件通常针对测试数据库运行,其架构可能与您的 curl 请求所命中的数据库不是最新的(如果确实有单独的数据库)。
    • 实际上,该表是一个以articleContent 为列名的单列表(在phpmyadmin 中)。在学说orm文件中也是同名。我正在深入研究您的评论以检查更多可能的原因(因为文档也指向一些附近的问题welcometothebundle.com/…)。再次感谢
    • “articleContent”列是否设置了“UNIQUE”约束?您能否在 phpmyadmin 中插入具有相同值的两行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2021-04-20
    • 2019-04-27
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 2020-09-23
    相关资源
    最近更新 更多