我正在构建一个 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;