問題タブ [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 - ポリモーフィック メンバーを使用して Json を Java にデシリアライズする
genson を使用して JSON 文字列を Java オブジェクトにデシリアライズしようとしていますが、成功しませんでした。私のクラス構造は次のようなものです:
ご覧のとおり、との両方のメンバーとしてComplexConditionanotherComplexConditionまたは aを持つことができます。私が得るjsonは次のようなものです:SimpleConditionleftright
この json では、 aにとas s のComplexCondition両方があります。しかし、私が受け取る一般的な json 文字列は、aから s のネストの任意のレベルまでの範囲である可能性があります。json 文字列に値を設定しようとしましたが、それでも genson はそれを逆シリアル化できませんでした。任意のライブラリを使用して、この json を Java に逆シリアル化する際の助けに感謝します。leftrightSimpleConditionSimpleConditionComplexCondition@class
json - Genson によって JSON にマップされているオブジェクトの一部のフィールドのみを含めたい
私の Pojo クラスには 50 個のフィールドが含まれており、10 個のフィールドのみを json に変換する必要があります。
「include()」メソッドが機能していないようです。親切に助けてください。
java - Jersey の ContextResolver および Provider とは何ですか?
ContextResolverジャージーの とは何Providerですか? 2つの違いは何ですか?Genson with Jerseyを使用しています。Jersey がクラスパスで Genson JAR を見つけると、Genson は自動登録されます。Genson JAR の WEB-INF/services ディレクトリには、「org.glassfish.jersey.internal.spi.AutoDiscoverable」というファイルが含まれています。
そのAutoDiscoverableパスに従って、デフォルトで Genson/Jersey は次のクラスを自動登録します。
ここでさらに混乱が生じます。Genson のドキュメントを見ると、次のようなカスタム プロバイダーを作成することが推奨されています。
ただし、そのプロバイダーは、内部の Genson のように /Writer を実装してContextResolverいません。MessageBodyReader違いは何ですか?また、そのプロバイダは、デフォルトの自動登録されたものと同じことをしません! 特に、!のような JAXB タグは無視されます。@XmlTransientの Genson ソース コードを掘り下げるGensonJaxRSFeatureと、Genson オブジェクトが次のように作成されていることがわかります。
それと Genson のドキュメントから、「JAXBBundle」がおそらく Genson が JAXB アノテーションに注意を払う原因であることがわかります。
主な問題:
Jersey に自動登録されるデフォルトの Genson JSON プロバイダーを使用したいのですが、それにいくつかのカスタム プロパティを設定したいと考えています。前述したように、カスタム プロバイダーを登録すると、デフォルトの Genson プロバイダーは使用されません。
アップデート:
これが私が今していることであり、うまくいきます。ただし、@eugen による以下のソリューションは、Genson が推奨するソリューションです。
java - Genson が ArrayIndexOutOfBoundsException をスローする
Genson の内部ライブラリ コードは ArrayIndexOutOfBoundsException を引き起こしています。これは、null であると想定している配列にインデックスを付けようとしているためです。下記参照。
次のスタック トレースを取得します。
これは、Genson ライブラリの次のメソッドが原因です。
メソッドの次のコードから来ています: method.getGenericParameterTypes()[0]。デバッグすると、メソッドが「エラー」であると表示されます。MyObject に次のメソッドがある List を操作しようとしています (失敗したメソッドのみが表示されます)。
このバグを回避するにはどうすればよいですか? なぜゲンソンはそれをしているのですか?
java - Genson 1.4 (JSON) が継承された Pojo を処理しない
REST 実装で JSON 処理に genson 1.4 を使用しています。genson の使用中に JSON 継承が機能しません。以下のサンプル コード構造を見つけてください。
これは私の BaseObject です
これは私の子クラスです
これは私の応答オブジェクトです
}
これは、GENSON JSON 出力です。
{"baseObject":{"status":null},"errorCode":null,"errorMessage":null,"primaryKey":null}
CountryCode、areaCodeおよびlocalNumberJSONに欠落しており、基本クラスのみが処理されます。このようなコードから同じことを試しました
出力は残りのサービスと同じでした。
java - Genson: RuntimePropertyFilter の使用中に子のプロパティを処理する
Genson の構成では、 を使用しUrlQueryParamFilterました。そして、それは機能しますが、期待どおりではありません。
私のエンティティ:
「rootEntity」エンドポイントRootは、残りのサービスでいくつかのインスタンスを取得するためにバインドされています。私http://<host>/myservice/rootEntity?filter=childsが取得すると、すべての子のプロパティを持つすべての子が取得されると予想されます。しかし、実際には子の構造のみを取得しました:
そして、私が取得したいもの:
どうすれば修正できますか?
どうも。
java - 「メディアタイプのMessageBodyWriterが見つかりません...」(JSON)を提供する最初のWebクライアント
最初に短編を紹介します。Eclipse で、「必要なライブラリーの抽出」ではなく、jar ファイルを使用して jar ファイルをエクスポートすると (Runnable Jar ウィザードで「必要なライブラリーをパッケージ化...」を選択)、すべてが機能しますが、非常に遅くなります。抽出メソッドを使用して jar をビルドすると、コードによって最終的なエラーが発生します
私はMavenを使用していません。私はまだそれを知りません。私はほとんどの場合、Eclipse の経験がほとんどありませんが、そこに到達しています。Genson は、JSON を作成するために必要なものを提供してくれると思いました。
jar ファイルをリストして MessageBodyWriter を grep すると、次のようになります。
より長い話に入るために、Eclipse で単純な Java プロジェクトを作成し、ビルド パスに外部 jar を追加しました。Eclipse は、何かが欠けていても文句を言いません。私のコードには、未使用のこれとあれに関する警告が 1 つか 2 つしかありません。エクスポートは、どちらの方法でも問題なく機能します。問題はありません。実行するだけで、いくつかの苛立ちが明らかになります。
私の要求クラスでは、すべてを正しく設定したと思います。これは想像できる最も単純な POST クライアントです。必要な空のコンストラクター、正しい注釈があります。
これは失敗する私の究極の呼び出しです
これらは私の外部ジャーです
正しく「エクスポート」されていないものが jar にあるように感じますが、よくわかりません。ここで推測すると、Java は大きな jar 内のすべての jar を分解するプロセスを実行する必要があるため、実行を開始するために必要なものを見つけますが、大きな jar 内の .classes ではそうではありません。
一瞬途方に暮れましたが、順調に進んでいます。ポインタをいただければ幸いです。
java - runnable jar 作成の醍醐味 (Jersey & Genson)
Eclipse の Runnable Jar ウィザードを使用して、毎回実行可能な jar を作成できます。Eclipse のチェックボックスをオンにして「ANT スクリプトとして保存」し、そのコードを build.xml に組み込み、GitLab CI プロセスでビルドを実行して実行可能な jar を作成すると、実行されますが、見つからないようです。 .class ファイルがそこにある場合でも、その jar 内のクラス。
どこから始めればよいかわかりません。Eclipse ビルドとスタンドアロンの Java/ant ビルドの結果の jar ファイルは似ていますが、まったく同じではありません。いくつかのことがうまくいっていませんが、現時点で指を置くことができるのはそれだけです。
どうすればこれに磨きをかけることができますか?私のプログラムはジャージー Web クライアントです。Gensonを使用していますが、スタンドアロンの jar ビルドで表示されるエラー メッセージは次のとおりです。
しかし、jarファイルをリストすることができ、両方にこれらのエントリがあります
今のところ、Eclipse でビルドを行い、ファイルを手動でデプロイすることで回避できますが、もちろんこれは受け入れられません。
編集: 親切な友人のおかげで、META-INF/services の内容を指摘されました。それが何を意味するのかわかりませんが、これが両方の瓶からの内容です。
EDIT3: 各重複 org.glassfish.jersey.internal.spi.AutoDiscoverableの内容(3)
- com.owlike.genson.ext.jaxrs.JerseyAutoDiscoverable
- org.glassfish.jersey.logging.LoggingFeatureAutoDiscoverable
- org.glassfish.jersey.server.filter.internal.ServerFiltersAutoDiscoverable
org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable (2)
- org.glassfish.jersey.jaxb.internal.JaxbAutoDiscoverable
- org.glassfish.jersey.logging.LoggingFeatureAutoDiscoverable
重複のないEclipseによって構築された「良い」jarファイルとの比較:
org.glassfish.jersey.internal.spi.AutoDiscoverable内 com.owlike.genson.ext.jaxrs.JerseyAutoDiscoverable
私は他の META-INF のことを掘り下げると思いますので、何が見えるか見てください。
org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable内org.glassfish.jersey.jaxb.in ternal.JaxbAutoDiscoverable
java - Genson を使用したランタイムのシリアル化条件
Genson を使用して、実行時にオブジェクト プロパティを条件付きでシリアル化することは可能ですか? 言い換えれば、条件のために実行時にプロパティを含める/除外するには?
ドキュメントで RuntimePropertyFilter を読みましたが、使用方法の例はありません。
前もって感謝します!