我正在创建一个自定义(去)规范化器来处理实体。我已经创建了规范化器并允许服务容器 Autowiring /自动配置。在反序列化期间正确选择了服务,但我在使用名称转换器时遇到了问题。我想使用 MetadataAwareNameConverter 服务,因为我在实体中使用 @SerializedName 注释。无论我做什么,自定义规范化器中的它始终为空。我尝试了多种获取名称转换器服务的方法:
- 在我的类构造函数中显式设置它
- 在服务定义中设置它(有效地摆脱 Autowiring /自动配置)
- 在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)
最佳答案
在 services.yaml
中手动注入(inject) MetadataAwareNameConverter
为我解决了问题。
App\Serializer\CustomNormalizer:
arguments:
$nameConverter: '@serializer.name_converter.metadata_aware'
关于symfony - 自定义规范器未通过名称转换器服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60938367/