4

Jackson 2.1.3 を使用しています。私の目標は、JSON から Bean を逆シリアル化するときに、フィールドにデフォルト値を使用することです。特に私はScalaで書いているので、JSONでフィールドが指定されていなくても、scalaクラスのコンストラクタでデフォルト値が指定されている場合、デシリアライザーはフィールドのデフォルト値を使用する必要があります。実行時に既知のコンストラクターとインデックスまたは不足しているパラメーターの名前のデフォルト値を取得できますが、Bean デシリアライザーでこの値を使用する方法が見つかりません。

この問題は Jerkson で解決されたことは知っていますが、Scala 2.10 では実行されないため、まず使用できません。次に、Jacksons の BeanDeserializer の代わりに、ケースクラスに独自のデシリアライザーを使用して解決しました。ジャクソンの基本的な機能の一部が失われます。

「findDeserializer」メソッドを定義して AnnotationIntrospector を使用しようとしました。カスタムの「getNullValue」で DelegatingDeserializer を拡張しましたが、デリゲートに問題がありました。「findDeserializer」メソッドのコンテキストで、型情報を失うことなく適切なデシリアライザーを取得する方法が見つかりませんでした。

その後、Jackson のソースを読むのに多くの時間を費やしましたが、Jackson ライブラリの半分をいくつかのフィールドに弱めのアクセス修飾子でコピー アンド ペーストせずに、Bean のデシリアライゼーションのフィールドにデフォルト値を提供する方法が見つかりませんでした。

4

0 に答える 0