我正在使用FOS Rest bundle和JMS Serializer来创建REST Api。问题是我想保留JSON响应中的属性名称,而不是使用_。
例如,我有一个名为employeeIdentifier的属性,默认情况下会转换为employee_identifier。
我看到配置中有一个选项可以禁用小写并删除_,但随后它变为EmployeeIdentifier。
有没有什么方法JMS Serializer保留属性的原始名称?提前致谢
我找到了一种全局的方法,如果你想保留属性名称,你需要使用IdenticalPropertyNamingStrategy
有几种方法可以实现这一点,首先通过更改配置(Thanks @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/Resources/config/services.xml,因此您应该能够覆盖它们
另一种方法是初始化构建器时:
$serializebuilder = JMS\Serializer\SerializerBuilder::create();
$serializebuilder->setPropertyNamingStrategy(new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy());
$serializer = $serializebuilder->build();
将jms / serializer-bundle从1.1升级到2.2后,上面描述的参数hack无法正常工作。您可以按如下方式覆盖服务定义:
#app/config/services.yml
services:
....
jms_serializer.serialized_name_annotation_strategy:
class: JMS\Serializer\Naming\SerializedNameAnnotationStrategy
arguments:
- '@jms_serializer.identical_property_naming_strategy'
我找到了一种方法,但这不是我想的最好的方法,有一个注释SerializedName,它允许你覆盖属性序列化。问题是你必须在每个带有驼峰的属性上逐一进行,这里是文档:YAML:http://jmsyst.com/libs/serializer/master/reference/yml_reference注释:http://jmsyst.com/libs/serializer/master/reference/annotations#serializedname