【发布时间】:2018-07-07 00:39:10
【问题描述】:
多年来,我一直在 SF2 和 SF3 上使用 Group 注释。 我正在尝试 SF4.1。当我向我的端点发送 GET 时,我得到一个空的 JSON。
我的 composer.json 中有趣的部分:
"friendsofsymfony/rest-bundle": "^2.3",
"jms/serializer-bundle": "^2.3",
"sensio/framework-extra-bundle": "^5.1",
"symfony/serializer-pack": "^1.0"
配置:
framework:
serializer:
enabled: true
enable_annotations: true
sensio_framework_extra:
view: { annotations: true }
fos_rest:
routing_loader:
default_format: json
view:
view_response_listener: 'force'
format_listener:
rules:
- { path: ^/, prefer_extension: true, fallback_format: json, priorities: [ json,xml, html ] }
实体
use JMS\Serializer\Annotation\Groups;
class User implements UserInterface, \Serializable
{
private $id;
/**
* @Groups({"api"})
*/
private $username;
还有端点 API 控制器:
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Context\Context;
use FOS\RestBundle\View\View;
class UserController extends FOSRestController {
public function getUserAction(Request $request, EntityManagerInterface $em)
{
$user = $em->getReference('App:User', 1);
$view = View::create();
$context = new Context();
$context->setGroups(['api']);
$view->setContext($context);
$view->setData($user);
return $this->handleView($view);
}
}
如果我删除 `$context->setGroups(['api']),则 JSON 具有所有用户属性。
有什么想法吗?谢谢!
调试信息:
bin/console debug:container jms
选择以下服务之一以显示其信息 [fos_rest.serializer.jms]: [0] fos_rest.serializer.jms
0
服务“fos_rest.serializer.jms”的信息 =================================================
选项值
服务 ID fos_rest.serializer.jms
类 FOS\RestBundle\Serializer\JMSSerializerAdapter
标签 -
公众号
合成无
懒惰是的
共享是
摘要无
自动接线没有
自动配置没有
【问题讨论】:
-
您能否尝试在您的
$username字段中添加以下注释:@Symfony\Component\Serializer\Annotation\Groups({"api"})?如果它可以工作,那么你使用的是 symfony 序列化程序而不是 JMS。 -
你是对的 :-) 我如何使用 JMS 序列化程序?
-
我检查了
jms_serializer.serializer服务是否存在,它优先于serializer服务。因此,如果捆绑包已加载,它应该是默认值(如果是这种情况,请检查bin/console debug:container jms_serializer.serializer)。如果确实已加载,则似乎序列化程序服务已被覆盖(检查bin/console debug:config fos_rest service.serializer)。如果是,您可以在“fos_rest.service.serializer”键下配置它并将其设置为fos_rest.serializer.jms。 -
我已经更新了问题,包括调试信息。我添加了 fos_rest.service.serialize: fos_rest.serializer.jms 并收到此错误:ServiceNotFoundException 服务“fos_rest.serializer.jms”依赖于不存在的服务“jms_serializer.serializer”。
-
嗯,似乎
JMSSerializerBundle没有加载,因为jms_serializer.serializer服务不存在 - 您是否检查过捆绑包是否已加载?
标签: symfony fosrestbundle jmsserializerbundle