web-dev-qa-db-ja.com

JMSシリアライザー:プロパティにキャメルケースを使用する方法

FOS RestバンドルとJMSシリアライザーを使用してREST Apiを作成しています。問題は、_を使用する代わりにJSON応答キャメルケースのプロパティ名を保持したいことです。

たとえば、employeeIdentifierというプロパティがあり、デフォルトではemployee_identifierに変換されます。

構成に小文字を無効にして_を削除するオプションがあることを確認しましたが、それがEmployeeIdentifierになります。

JMSシリアライザーがプロパティの元の名前を保持する方法はありますか?前もって感謝します

8
petekaner

プロパティ名をそのままにしておきたい場合は、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();
33
Chase

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'
1
Ian Foulds

Config.ymlの代わりにparameters.ymlに以下を追加する必要がありました:

jms_serializer.serialized_name_annotation_strategy.class: JMS\Serializer\Naming\SerializedNameAnnotationStrategy

0
Ste

私はそれを行う方法を見つけましたが、それは私が思う最善の方法ではありません。プロパティのシリアル化をオーバーライドできる注釈SerializedNameがあります。問題は、ラクダの場合、すべてのプロパティで1つずつ実行する必要があることです。ドキュメントは次のとおりです。YAML: http://jmsyst.com/libs/serializer/master/reference/yml_reference アノテーション: http://jmsyst.com/libs/serializer/master/reference/annotations#serializedname

0
petekaner