1

我正在构建一个 web 服务,我打算只提供一个 json 接口。

为此,我想让用户与我的 API 交互尽可能容易。在理想的世界中,消费者发送 Content-Type 标头为“application/json”的请求,但是我希望我的 API 接受 json 编码的请求,而不考虑 Content-Type 标头。

我正在使用 Symfony2 和 FOS_RESTBundle 并设置了一个主体侦听器和格式侦听器以及到我的控制器的路由,该路由应该强制格式为应用程序 json。

如果我发送 Content-Type 为“application/json”的请求,则正文已正确解码。在下面的示例中,任何其他 Content-Type 标头结果都是 $data 的空值。$type 总是 json (由于路由中的 _format )。

我哪里错了?

// config.yaml 
fos_rest:
view:
    view_response_listener: false
    failed_validation: HTTP_BAD_REQUEST
    default_engine: php
    formats:
        text: false
        xml: false
        html: false
        json: true
format_listener:
    default_priorities: ['application/json']
    fallback_format: json
    prefer_extension: true
body_listener:
    decoders:
        json: fos_rest.decoder.json

和 -

// Routing.yaml

_api_contact_request_create:
  pattern: /api/merchant/{merchantId}/customer-contact-request
  defaults: { _controller: AcmeApiBundle:CustomerContact:Create, _format: json}
  type: rest
  requirements: 
     _method: POST

最后 -

    // Extract from Controller
    public function CreateAction($merchantId) {

        $data = $this->getRequest()->request->get('data');

        $type = $this->getRequest()->getRequestFormat();

        var_dump($type, $data);die;
4

0 回答 0