当尝试使用Jackson序列化一个非常简单的对象时,出现异常。错误:
下面是简单的类和要序列化的代码。
谁能告诉我为什么我会收到此错误?
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
实例的默认配置是仅访问属于公共(public)字段或具有公共(public) getter / setter 的属性。更改类定义以使字段成为公共(public)字段或提供公共(public)的getter/setter方法的另一种方法是(针对底层VisibilityChecker
)指定不同的属性可见性规则。 Jackson 1.9为此提供了ObjectMapper.setVisibility()
便捷方法。对于原始问题中的示例,我可能会将其配置为
myObjectMapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);
对于Jackson> 2.0:
myObjectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
有关相关配置选项的更多信息和详细信息,我建议查看the JavaDocs on
ObjectMapper.setVisibility()
。关于java - 使用Jackson(JSON)进行序列化-获得 “No serializer found”吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8367312/