問題タブ [jackson-databind]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ジャクソン、プライベートフィールドとアノテーションなしのarg-constructorでクラスを逆シリアル化する
Jackson?
この組み合わせを使用する場合、Jackson でそれが可能であることはわかっています。1) Java 8、2) 「-parameters」オプションを使用してコンパイル、3) パラメータ名が JSON に一致します。しかし、これらすべての制限なしでデフォルトで GSON でも可能です。
例えば:
これは GSON では問題なく動作しますが、Jackson は次のようにスローします。
GSON では可能であるため、Person クラスを変更せずに、Java 8 を使用せず、明示的なカスタム デシリアライザーを使用せずに、Jackson に何らかの方法があるはずです。誰かが解決策を知っていますか?
- 更新、追加情報
Gson は引数コンストラクターをスキップしているように見えるため、リフレクションを使用して舞台裏で引数なしのコンストラクターを作成しているに違いありません。
また、 「-parameters」コンパイラ フラグがなくても、Kotlin データ クラスに対してこれを実行できるKotlin Jackson モジュールが存在します。したがって、Java Jackson にそのようなソリューションが存在しないように見えるのは奇妙です。
これは、Kotlin Jackson で利用できる (素晴らしくクリーンな) ソリューションです (この IMO は、カスタム モジュールを介して Java Jackson でも利用できるようになるはずです)。
java - Jackson ObjectCodec から文字列 json へ
Jackson では、JsonNode を JSON 文字列に安全にキャストするにはどうすればよいでしょうか。
でこれを行うことができObjectMapper#writeValueAsString
、通常のコンテキストでObjectCode
は にキャストできることはわかっていますObjectMapper
が、あまりきれいではないようです。
も可能ですpayload.toString()
が、ドキュメントには次のように記載されています。
ノードの開発者が読み取り可能な表現を生成するメソッド。これは、有効な JSON である場合とそうでない場合があります。有効な JSON 出力 (または Jackson がサポートする他のデータ形式のいずれかを使用してフォーマットされた出力) が必要な場合は、必ず {@link ObjectMapper} または {@link ObjectWriter} を使用してインスタンスをシリアル化してください。例: String json = objectMapper.writeValueAsString(rootNode );
したがって、これを使用しても安全ではありません。
私が見る最後の可能性は、 new を構築することObjectMapper
ですが、私にはあまり効率的ではないようです。