FOSRestBundle返回空内容

时间:2018-10-02 15:26:35

标签: php symfony-3.4 serializer

我正在我的项目中实现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实体,我要缺少什么?

1 个答案:

答案 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序列化器配置不正确。