Jackson を使用して非常に単純なオブジェクトをシリアル化しようとすると、例外が発生します。エラー:
org.codehaus.jackson.map.JsonMappingException: クラス MyPackage.TestA のシリアライザーが見つからず、BeanSerializer を作成するためのプロパティも検出されませんでした (例外を回避するには、SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS を無効にしてください)
以下はシリアル化するための単純なクラスとコードです。
なぜこのエラーが発生するのか、誰か教えてもらえますか?
public class TestA {
String SomeString = "asd";
}
TestA testA = new TestA();
ObjectMapper om = new ObjectMapper();
try {
String testAString = om.writeValueAsString(testA); // error here!
TestA newTestA = om.readValue(testAString, TestA.class);
} catch (JsonGenerationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ベストアンサー1
すでに説明したように、インスタンスのデフォルト設定では、ObjectMapper
パブリックフィールドまたはパブリックゲッター/セッターを持つプロパティにのみアクセスします。クラス定義を変更してフィールドをパブリックにしたり、パブリックゲッター/セッターを提供したりする代わりに、(基になる にVisibilityChecker
)異なるプロパティの可視性ルールを指定することができます。Jackson 1.9 ではObjectMapper.setVisibility()
、これを行うための便利なメソッドが提供されています。元の質問の例では、次のように設定するでしょう。
myObjectMapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);
Jackson >2.0の場合:
myObjectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
関連する設定オプションの詳細については、以下を確認することをお勧めします。JavaDocsのObjectMapper.setVisibility()
。