FOS RestバンドルとJMSシリアライザーを使用してREST Apiを作成しています。問題は、_を使用する代わりにJSON応答キャメルケースのプロパティ名を保持したいことです。
たとえば、employeeIdentifierというプロパティがあり、デフォルトではemployee_identifierに変換されます。
構成に小文字を無効にして_を削除するオプションがあることを確認しましたが、それがEmployeeIdentifierになります。
JMSシリアライザーがプロパティの元の名前を保持する方法はありますか?前もって感謝します
プロパティ名をそのままにしておきたい場合は、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/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にアップグレードすると、上記のパラメーターハックは機能しませんでした。次のようにサービス定義をオーバーライドできます。
#app/config/services.yml
services:
....
jms_serializer.serialized_name_annotation_strategy:
class: JMS\Serializer\Naming\SerializedNameAnnotationStrategy
arguments:
- '@jms_serializer.identical_property_naming_strategy'
Config.ymlの代わりにparameters.ymlに以下を追加する必要がありました:
jms_serializer.serialized_name_annotation_strategy.class: JMS\Serializer\Naming\SerializedNameAnnotationStrategy
私はそれを行う方法を見つけましたが、それは私が思う最善の方法ではありません。プロパティのシリアル化をオーバーライドできる注釈SerializedNameがあります。問題は、ラクダの場合、すべてのプロパティで1つずつ実行する必要があることです。ドキュメントは次のとおりです。YAML: http://jmsyst.com/libs/serializer/master/reference/yml_reference アノテーション: http://jmsyst.com/libs/serializer/master/reference/annotations#serializedname