次のようなクラスの ArrayList があります。
public class Person {
String name;
String age
List<String> education = new ArrayList<String> ();
List<String> family = new ArrayList<String> ();
List<String> previousjobs = new ArrayList<String>();
}
このリストを Json として書きたいので、次のコードを試しました:
Writer out = new PrintWriter("./test.json");
mapper.writerWithDefaultPrettyPrinter().writeValueas(out, persons);
そして次のエラーメッセージが表示されました:
クラス ~~~~~~ のシリアライザーが見つからず、BeanSerializer を作成するためのプロパティも見つかりません (例外を回避するには、SerializationFeature.FAIL_ON_EMPTY_BEANS を無効にします) (参照チェーン: java.util.ArrayList[0] 経由)`
追加しようとしましたmapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
が、何らかの不明な理由ですべての Person オブジェクトが空になりました。
何が間違っているのでしょうか?
ベストアンサー1
抜粋ここ:
デフォルトでは、Jackson 2 は public のフィールド、または public の getter メソッドを持つフィールドのみで動作します。すべてのフィールドが private またはパッケージが private であるエンティティをシリアル化すると失敗します。
Person
すべてのフィールドが含まれていますパッケージ保護ゲッターがないので、エラー メッセージが表示されます。メッセージを無効にしても、クラスは依然としてempty
Jackson の観点からのものなので、当然ながら問題は解決しません。そのため、空のオブジェクトが表示され、エラーはそのままにしておく方がよいでしょう。
すべてのフィールドを次のように作成する必要がありますpublic
。
public class Person {
public String name;
// rest of the stuff...
}
または、次のように、各フィールドのパブリック ゲッターを作成します (また、フィールドをプライベートに設定することも推奨します)。
public class Person {
private String name;
public String getName() {
return this.name;
}
// rest of the stuff...
}