当我试图使用Jackson序列化一个非常简单的对象时,我得到了一个异常。错误:
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();
}
As already described, the default configuration of an ObjectMapper instance is to only access properties that are public fields or have public getters/setters. An alternative to changing the class definition to make a field public or to provide a public getter/setter is to specify (to the underlying VisibilityChecker) a different property visibility rule. Jackson 1.9 provides the ObjectMapper.setVisibility() convenience method for doing so. For the example in the original question, I'd likely configure this as
myObjectMapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);
杰克逊>2.0:
myObjectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
有关相关配置选项的更多信息和详细信息,我建议查看ObjectMapper.setVisibility()上的JavaDocs。
在我的案例中,问题是Jackson试图序列化一个没有属性和方法的空对象。
正如在异常中所建议的那样,我添加了以下一行以避免在空bean上失败:
杰克逊1.9
myObjectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
杰克逊2。X
myObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
您可以在jackson disable fail_on_empty_beans上找到一个简单的示例