我正在我的项目中实现FOSUserBundle。我想要一个基本的GET操作来返回ContactList实体的json对象。
控制器:
class ContactListController extends FOSRestController
{
use ViewContextTrait;
const DEFAULT_GROUPS = ['organization_list'];
/**
* @ParamConverter("contactList", class="SchemaBundle:ContactList")
* @param ContactList $contactList
* @return Response
*/
public function getAction(ContactList $contactList)
{
return $this->handleView($this->viewWithContext($contactList, Response::HTTP_OK));
}
特质:
use FOS\RestBundle\Context\Context;
use FOS\RestBundle\View\View;
trait ViewContextTrait
{
public function viewWithContext($data, $statusCode = null, $groups = self::DEFAULT_GROUPS)
{
$context = new Context();
$context->setGroups($groups);
return View::create($data, $statusCode)->setContext($context);
}
}
我的config.yml
:
fos_rest:
routing_loader:
include_format: false
body_listener:
array_normalizer: fos_rest.normalizer.camel_keys
param_fetcher_listener: true
view:
view_response_listener: 'force'
format_listener:
rules:
- { path: '^/api', priorities: ['json'], fallback_format: json, prefer_extension: false }
问题:当我通过邮递员(/api/contact-list/1
)呼叫此路线时,我在Response对象中的内容总会得到一个{}
。
这是转储的响应:
要在响应中返回带有上下文组的序列化ContactList实体,我要缺少什么?
答案 0 :(得分:0)
解决方案:
首先,我的注释不包括在内。我必须将此添加到我的config.yml
中:
framework:
serializer:
enabled: true
enable_annotations: true
接下来,我忘记了以前曾经将JMS序列化程序包含在我的项目中。显然,它使用的Rest Bundle has a default order of serializer services的ViewHandler。我最终不得不在我的config.yml
中加入它:
fos_rest:
service:
serializer: fos_rest.serializer.symfony
默认情况下,FOSRest使用的JMS序列化器配置不正确。