問題タブ [genson]
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 - ジャージークライアントでGensonプロバイダーをデフォルトとして使用するには?
Jersey フレームワークに基づく単純なクライアントがあります。
Genson をデフォルトの JSON プロバイダーとして使用したいと考えています。
まず、実装するクラスを作成しましたContextResolver
:
UtcDateFormat クラス:
次に、これを使用しました:
しかし、それは失敗しました。ログは次のとおりです。
どうしたの?
PS Jersey クライアント 1.8
Genson 0.98
java - ネストされた JSON を genson で解析する
Web API から取得した JSON を Java オブジェクトに解析しようとしていますが、いくつか問題があります。
JSONは次のとおりです。
次に、このデータを次の Java クラスにマップして、結果が Catalog オブジェクトになり、結果配列の値が CatalogEntry オブジェクトになるようにします。
次の行で、JSON 文字列を Catalog オブジェクトに逆シリアル化しようとします。
その後、Catalog オブジェクトの値を取得しようとしましたが、空のように見えるため、NullPointerException が発生します。JSON の "d" オブジェクトにデシリアライズの問題があると思いますが、これを修正するにはどうすればよいですか? どんな助けでも大歓迎です。
java - Genson と Jersey を使用して POST から JSON 日付を解析する
クイック イントロ (スキップできます) : こんにちは、このトピックについては多くの質問と回答がありますが、解決策が非常に単純で、考えもしない場合があります。すべての回答に補足を投稿します。
問題 : POST 要求を処理して JSON オブジェクトを保存する JSON REST サービスがありますが、そのオブジェクトには、Genson によってそのままでは解析されない Date フィールドが含まれています。
Java オブジェクト:
Jersey を使用した REST サービス:
jQuery を使用した JavaScript のクライアント:
java - JAX RS サービスからの有効な json 出力で Genson がチョークする
genson 1.3 を使用して jax rs サービスからの json 応答を、次のようなオブジェクトのリストに逆シリアル化しようとしています。
jsonlint で確認しましたが、有効です。List<LogicalVolumeImpl>
次のコードでデシリアライズしようとしています
そしてこの例外を取得します:
私が理解しているように、これはおそらく「グループ」オブジェクトプロパティがオブジェクトのIDだけに削減されたことが原因です(「グループ」:gensonが期待する完全なラップされていないオブジェクトではなく2)。
私に何ができる?GensonBuilder で exclude(String field) を使用してグループ プロパティを除外しようとしましたが、有効になりました。
アップデート
LogicalVolumeImpl および VolumeGroupImpl のソース
java - Genson プロパティ読み取りエラー
http://www.jsonschema2pojo.org/を使用して JSON テンプレートからクラスを作成し、Gensonを使用して JSON を Jersey ベースの WS にマップします。これは私の「jsonクラス」の最初の行です:
クラスにもゲッターとセッターがいます。
投稿リクエストを処理するための restfull Ws を作成し、firefox RESTClinent プラグインを使用して jsons オブジェクトを送信しようとしました。
これは、送信しようとした json オブジェクトの最初の行です。
私の WS Post ハンドラー メソッドは次のようになります。
リクエストが到着し、createInvoice()
メソッドが呼び出されますが、それを呼び出すnewBillingoInvoice.getDueDate()
とnullが返されますが、呼び出すと、リクエストjsonで送信した値が返されます..などnewBillingoInvoice.getSignature()
.. returnを呼び出すと、 returnを値で呼び出す場合..など.. newBillingoInvoice.getXY();
null
newBillingoInvoice.getOtherSomething();
null
私の質問は、1 つのプロパティが同じオブジェクトにあり、もう1 つのプロパティが同じオブジェクトにないということはどのように起こり得るnull
のでしょうか? リクエストを作成するときに、すべてのプロパティを設定しましたnull
。
私を助けてください!ありがとうございました!
java - Genson ポリモーフィック / ジェネリック シリアライゼーション
以下を含むポリモーフィック型のGenson 1.3 を使用して、Java で JSON シリアル化を実装しようとしています。
Number
s- 配列
Enum
クラス
以下の SSCCE は、私が達成しようとしていることを大まかに示しています。
Numbers と Arrays はそのままで問題なく機能しましたが、enum クラスには少し問題がありました。この場合、シリアル化された JSON フォームは、次のものを含む IMO JSON オブジェクトである必要があります。
- タイプメンバー
- バリューメンバー
クラスを見るEnumConverter
と、カスタムを提供する必要があることがわかりますConverter
。ただし、逆シリアルConverter
化中に呼び出されるように を適切に登録する方法がよくわかりません。このシリアル化は、Genson を使用してどのように解決する必要がありますか?
java - Bean アクセサーの Genson キャッシング
私は最近 Genson 1.3 にアップグレードしましたが、以前に 0.98 バージョンにパッチを当てて動作させたので、この問題が新しいものかどうかは 100% わかりません。
環境
BeanMutatorAccessorResolver の独自の実装を使用しています。これは、プロパティをシリアル化するかどうかを動的に決定できるようにするためです。基本的に、Genson を汎用ジャージー REST API インターフェースに統合しました。Genson はすべてのシリアライズとデシリアライズを行います。GET リクエストを実行する場合、ユーザーが特に必要とするフィールドをフィルタリングするために、URL にフィールドを渡すことができます (特に大きなオブジェクトの場合、テーブルの概要を表示するために 3 つのフィールドしか必要ない場合に必要です)。例: ?fields=field1、field2、field3。次に、BeanMutatorAccessorResolver の実装で、シリアル化するフィールドと無視するフィールドを正確に認識します。これは主に、より少ないデータで作業しているため、リクエストと解析を高速化することを目的としています。
問題
残念ながら、Genson がリフレクションなどを介してすべてのフィールドを読み込むと、それがキャッシュされるようです。これは、常に同じフィールドを要求していれば問題ありません。残念ながら、以前よりも多くのフィールドが必要になる場合がありますが、Genson は BeanMutatorAccessorResolver に 2 回アクセスしないため、既にキャッシュされている少数のフィールドのみを返します。
とにかくこのあたりはありますか?おそらく、キャッシュを完全にオフにするよりも優れた解決策があるでしょう。おそらくパフォーマンスが低下するからですよね?
アップデート
これが起こっている場所を見つけたようです。基本的に、Genson は Genson.provideConverter(Type forType) (行: 154) でキャッシュされたコンバーターを返します。
メソッドの先頭で、__GENSON$DO_NOT_CACHE_CONVERTER を探していることに気付きました。
おそらくこの値を設定する必要がありますか、それともより良い解決策がありますか?