Spring MVCでJackson JSONを使用する場合、デフォルトでPascal Casingを有効にするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4670116

質問

Spring MVCを使用して複数のRESTエンドポイントを作成および処理するプロジェクトがあります。私は現在、ジャクソンを使用して、JSONのセラル化/脱着を自動的に処理しています。 @RequestBody@ResponseBody 注釈。

ジャクソンが働いてきたので、出発点があります。私の問題は、古い連続化が手動で行われ、ラクダケーシングの代わりにパスカルケーシング(「myvariable」の代わりに「myvariable」)を使用し、ジャクソンはデフォルトでラクダケーシングを行うことです。

使用して変数の名前を手動で変更できることを知っています @JsonProperty. 。そうは言っても、私は追加することを考えません @JsonProperty 私のすべての変数に対して、実行可能な長期ソリューションになります。

ジャクソンに、使用する以外にシリアル化と降下の際にパスカルケーシングを使用させる方法はありますか @JsonProperty 注釈?

編集:これを外部的に行うためのきれいな方法はないようです。カップルは、私の目標を達成する方法として、さまざまなクラスをオーバーライドすることを提案しました。ケーシングを変えることができるものについて、私がオーバーライドできるものについての提案を受け入れています。現時点では、私が望むいくつかのプロパティを設定するカスタムオブジェクトマッパーを作成しました(つまり、 Inclusion.NON_NULL)。ケーシングの動作を変える場所をまだ見つけていません。何かご意見は?

役に立ちましたか?

解決 2

(de)シリアイザーをオーバーライドすることで、問題を解決することになりました。興味のある方のために、自分でそれを行う方法は次のとおりです。

ステップ1.拡張 BeanSerializerFactory.

オーバーライドします _constructWriter(SerializationConfig config, TypeBindings typeContext, PropertyBuilder pb, boolean staticTyping, String name, AnnotatedMember propertyMember) 方法。その方法内で、変更します name 何らかの形であなたはフィット感を見ます。 Pascal Casingを実装するには、このラインを使用しました。 String formattedName = name.substring(0, 1).toUpperCase() + name.substring(1);. 。変更後 name, 、 電話 super._constructWriter.

ステップ2.拡張 BeanDeserializationFactory.

オーバーライドします constructSettableProperty(DeserializationConfig config, BasicBeanDescription beanDesc, String name, AnnotatedMethod setter) 方法。同じことをしてください name カスタム内で行ったパラメーター BeanSerializerFactory.

ステップ3.作成します ObjectMapper.

Serializer FactoryをカスタムBean Serializer Factoryに設定します。 Deserializerプロバイダーを設定します(この行を使用しました。 objectMapper.setDeserializerProvider(new StdDeserializerProvider(new CustomJacksonBeanDeserializerFactory()))).

それでおしまい。 ObjectMapper 作成したのは、JSONをシリアル化または脱必要にするときに、新しい命名スキームを使用します。

他のヒント

見る http://www.cowtowncoder.com/blog/archives/2011/03/entry_448.html1.8を待つことができれば、そこに含まれます。

それが価値があることのために、 ジラ問題 プラグ可能な戦略をサポートするため。それに対する投票は、開発者にサポートを追加するよう説得するのに役立つかもしれません。コメントで述べたように、内部の動作をオーバーライドすることは可能ですが、簡単なことではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top