我正在构建一个Web服务,我打算只提供一个json接口。
为此,我希望用户能够尽可能轻松地与我的API进行交互。在理想的世界中,消费者使用“application / json”的Content-Type标头发送请求,但是我希望我的API接受json编码的请求,而不管Content-Type标头。
我正在使用Symfony2和FOS_RESTBundle并设置了一个正文监听器和格式监听器以及一条到我的控制器的路由,该路由应该强制格式为应用程序json。
如果我发送内容类型为'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;