symfony - JMS Serializer Annotation Group 无法使用 Symfony 4 处理实体
问题描述
多年来,我一直在 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
标签 -
公共 no
Synthetic no
Lazy yes
Shared yes
Abstract no
Autowired no
Autoconfigured no
解决方案
默认情况下,FOSRest 首选 JMSSerializer(如果已安装)。所以首先检查是否定义了JMSSerializerBundle
定义的服务:
./bin/console debug:container jms_serializer.serializer
如果此命令显示错误消息 (ServiceNotFound),则说明包未正确安装。config/bundles.php
如果缺少以下行,请检查并添加:
JMS\SerializerBundle\JMSSerializerBundle::class => ['all' => true],
如果确实安装了,您可以检查fos_rest
配置,如果它可能会更改序列化程序服务。您可以像这样配置它:
fos_rest:
service:
serializer: "fos_rest.serializer.jms"
推荐阅读
- javascript - Gatsby - 警告尝试导入错误:“css”不包含默认导出(导入为“样式”)
- javascript - 如何通过使用 django 单击 HTML 按钮来运行具有不同参数的脚本
- android - Android 外部存储文件夹(通过 SAF 创建)及其内容被清理器错误删除
- regex - 确保尾部斜杠的 nginx 位置正则表达式
- javascript - 如何使用 JavaScript 在画布元素上添加加载器?
- python - 分离模块时如何处理共享类?
- angular - 类型 '(control: AbstractControl) => { firstLetterUppercase: { message: string; }; } | undefined' 不可分配给类型 'ValidatorFn'
- macos - 第二个网卡中的相同mac
- postgresql - 无法使用 JDBCSinkConnector 将数据从 Kafka 主题加载到 Postgres
- c++ - 计时器无法与 WiringPiISR(QtQuick 应用程序)一起使用