使用 Jackson (JSON) 进行序列化 - 获取“未找到序列化程序”?

2022-08-31 04:55:23

当我尝试使用 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

如前所述,实例的默认配置是仅访问作为公共字段或具有公共 getter/setter 的属性。更改类定义以使字段公开或提供公共 getter/setter 的替代方法是指定(对基础)不同的属性可见性规则。Jackson 1.9 提供了执行此操作的便利方法。对于原始问题中的示例,我可能会将其配置为ObjectMapperVisibilityCheckerObjectMapper.setVisibility()

myObjectMapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);

对于杰克逊>2.0:

myObjectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

有关相关配置选项的更多信息和详细信息,我建议查看 ObjectMapper.setVisibility() 上的 JavaDocs


答案 2

添加

吸气剂

二传手

问题就解决了。