我目前正在Symfony2应用程序中编写REST服务。这是(大致)我的一个控制器的样子:
/**
* @Route("/account", defaults={"_format" = "json"})
*/
class AccountController extends APIController
{
/**
* @Route("/")
* @Method("get")
*/
public function listAction()
{
// process something here and return JSON-encoded response
}
}
这一切都很好——也就是说,如果出现一些问题,我抛出一个HTTPException
,就会使用Symfony2的TwigBundle中正确的error.json.twig
,并将HTTP错误呈现为JSON。
然而,违反路由要求的情况并非如此,@Method("get")
就是其中之一。例如,如果我对上面的URL抛出POST
或PUT
,我仍然会得到正确的HTTP状态代码,但呈现的内容类型错误(text/html而不是application/json)。
我非常有兴趣让完整的API返回JSON响应,而不返回其他响应——问题是:我如何实现这一点?我是否必须一起省略路由要求,并自己检查要求(然后最终抛出自己的HTTPException
)?
您可能应该在他们的github页面上将其作为bug/愿望进行归档。(我试图找到负责的PHP文件,但HttpKernel组件并不完全适合胆小的人。)
您可以尝试在注释上使用yml路由。对我来说效果很好。对不起,不能给出更有用的回应了。