我正在使用FOS REST BUNDLE和JMS SERIALISER创建REST API。问题是我想将属性名称保存在JSON响应中,而不是使用_。
例如,我有一个称为员工Identionfier的属性,默认情况下,它将转换为雇员。
。我看到配置中有一个选项可以禁用小写并摆脱_,但随后变成了员工。
有什么方法可以使JMS Serializer保留该属性的原始名称?预先感谢
我找到了一种在全球范围内完成的方法,如果您要保留属性名称,请按照IdenticalPropertyNamingStrategy
有几种方法可以完成此操作,首先通过更改配置(感谢@phantom(:
#config.yml
jms_serializer:
property_naming:
id: 'jms_serializer.identical_property_naming_strategy'
第二,您可以覆盖此
的默认别名services:
jms_serializer.naming_strategy:
alias: jms_serializer.identical_property_naming_strategy
捆绑包定义这些https://github.com/schmittjoh/jmsserializerbundle/blob/master/master/resources/config/services.xml,因此您应该能够覆盖它们
另一种方法是初始化构建器时:
$serializebuilder = JMSSerializerSerializerBuilder::create();
$serializebuilder->setPropertyNamingStrategy(new JMSSerializerNamingIdenticalPropertyNamingStrategy());
$serializer = $serializebuilder->build();
将JMS/serilizer-Bundle从1.1升级到2.2 2.2上述参数黑客无效。您可以按以下方式覆盖服务定义:
#app/config/services.yml
services:
....
jms_serializer.serialized_name_annotation_strategy:
class: JMSSerializerNamingSerializedNameAnnotationStrategy
arguments:
- '@jms_serializer.identical_property_naming_strategy'
在 config/packages/jms_serializer.yaml
中使用此配置为我工作(Symfony 4.4和JMS ^3.8(:
jms_serializer:
property_naming:
id: jms_serializer.identical_property_naming_strategy
并手动删除缓存
https://github.com/schmittjoh/serializer/issues/1037
我找到了一种方法,但这并不是我认为的最好方法,有一个注释序列化名称允许您覆盖属性序列化。问题在于,您必须用骆驼盒在每个物业上对每个属性进行一个逐个地进行,这是文档:YAML:http://jmsyst.com/libs/serializer/master/reference/yml_reference注释:http://jmsyst.com/libs/serializer/master/Reference/Refereniations#SerializedName
我必须添加以下内容。
jms_serializer.serialized_name_annotation_strategy.class: JMSSerializerNamingSerializedNameAnnotationStrategy