symfony - 自定义规范器未通过名称转换器服务
问题描述
我正在创建一个自定义(反)规范化器来处理实体。我创建了规范器并允许服务容器自动装配/自动配置。在反序列化期间正确选择了该服务,但我在使用名称转换器时遇到了问题。我想使用 MetadataAwareNameConverter 服务,因为我在我的实体中使用了 @SerializedName 注释。无论我做什么,它在自定义规范器中始终为空。我尝试了多种获取名称转换器服务的方法:
- 在我的类构造函数中明确设置它
- 在服务定义中设置它(有效地摆脱 autowire/autoconfig)
- 在 framework.yaml 中将 MetadataAwareNameConverter 设置为默认值(我发现它已经是默认值了)。
- 将现有的规范器复制到我的 src 中并重命名它以查看它是否获得了正确的名称转换器(它仍然不起作用)
内置规范器可以毫无问题地获得名称转换器,只是我的自定义规范器有这个问题。
还有什么我应该尝试的吗?我是否错过了设置服务的步骤?任何方向表示赞赏。
更新 - 当我转储服务容器时,参数列表中缺少名称转换器服务
---------------- ----------------------------------------------------------
Option Value
---------------- ----------------------------------------------------------
Service ID App\Normalizer\QNormalizer
Class App\Normalizer\QNormalizer
Tags serializer.normalizer
Public no
Synthetic no
Lazy no
Shared yes
Abstract no
Autowired yes
Autoconfigured yes
Arguments Service(serializer.mapping.class_metadata_factory)
-----THIS IS WHERE THE NAME CONVERTER SHOULD BE----
Service(property_accessor)
Service(property_info)
Service(serializer.mapping.class_discriminator_resolver)
解决方案
我面临同样的问题。
就我而言,这是由于框架配置为autoconfigure
服务而发生的服务配置错误(这是默认框架配置)。
结果,我在服务列表中复制了我的自定义规范器。第一个是自动配置的,没有优先级第二个由我声明并注入名称转换器:
服务编号 | 优先 | 班级名称 |
---|---|---|
App\Adapter\Symfony\Serializer\Normalizer\TranslationNormalizer | App\Adapter\ApiPlatform\Serializer\Normalizer\ItemNormalizer | |
api_platform.serializer.normalizer.item | -895 | App\Adapter\ApiPlatform\Serializer\Normalizer\ItemNormalizer |
宣言:
api_platform.serializer.normalizer.item:
class: App\Adapter\ApiPlatform\Serializer\Normalizer\ItemNormalizer
arguments:
$nameConverter: '@serializer.name_converter.metadata_aware'
autoconfigure: false
tags:
- {name: serializer.normalizer, priority: -895}
由于自动配置的规范化程序在列表中具有更高的优先级 - 它是由序列化程序选择的,所以我的SerializedName
注释不起作用。
解决方案是禁用首次服务的自动配置:
App\Adapter\ApiPlatform\Serializer\Normalizer\ItemNormalizer:
autoconfigure: false
推荐阅读
- javascript - 如何从 d3.js 实现图形的 html 变量
- c# - Listview 包含具有外键的项目
- python - 如何在网络抓取期间找到所有标签隐藏的href?
- python - 如何在python纸浆目标函数中使用绝对值?
- javascript - 无法从子组件中获取数据反应
- html - 网格系统 - 当我添加相同大小的内部输入时,行和列之间的间隙不起作用
- javascript - 如何保存多个可拖动 jquery 元素的位置
- python - 无法在 Windows 上安装 psycopg2 2.8.6
- javascript - Graphql获取嵌套查询的单个对象属性
- azure - 有没有办法通过命令行导出 ADF 内容?