[解決済み] ジャクソンと汎用型リファレンス
2022-06-19 02:31:53
質問
以下のような汎用的なメソッドにjackson json libraryを使用したい。
public MyRequest<T> tester() {
TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>();
MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);
return requestWrapper.getRequest();
}
public class MyWrapper<T> {
private MyRequest<T> request;
public MyRequest<T> getRequest() {
return request;
}
public void setRequest(MyRequest<T> request) {
this.request = request;
}
}
public class MyRequest<T> {
private List<T> myobjects;
public void setMyObjects(List<T> ets) {
this.myobjects = ets;
}
@NotNull
@JsonIgnore
public T getMyObject() {
return myobjects.get(0);
}
}
問題は、リクエスト・オブジェクトの中にある getMyObject() を呼び出すと、Jackson はネストされたカスタム・オブジェクトを LinkedHashMap として返すということです。T オブジェクトを返す必要があることを指定する方法はありますか?例えば、私がCustomer型のオブジェクトを送った場合、Customerはそのリストから返されるべきでしょうか?
どのように解決するのですか?
これはJavaの型消去でよく知られている問題で、Tは単なる型変数であり、実際のクラスを、通常はClassの引数として示さなければなりません。そのような情報がない場合、できる最善の方法は bounds を使用することであり、プレーン T は 'T extends Object' とほぼ同じです。そして、Jacksonは、JSONオブジェクトをMapとしてバインドします。
この場合、テスターメソッドはClassにアクセスする必要があります。
JavaType type = mapper.getTypeFactory().
constructCollectionType(List.class, Foo.class)
で、次に
List<Foo> list = mapper.readValue(new File("input.json"), type);
関連
-
java.util.NoSuchElementException 原因解析と解決方法
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
java 例外。Javaツールの初期化
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] Jackson を使用してオブジェクトの配列をデシリアライズする方法
-
[解決済み] 汎用型Tのクラスインスタンスを取得する方法を教えてください。
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
java 例外。Javaツールの初期化
-
JSPで「リストが型解決できない!」の解決方法
-
テストが見つかりませんでした
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決