1. ホーム
  2. java

[解決済み] Jacksonでシリアライズ(JSON) - "No serializer found "と表示される?

2022-02-02 18:59:03

質問

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();
}

解決方法は?

すでに説明したように、デフォルトの構成では 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() .