当我试图使用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();
}

当前回答

添加一个

getter

和一个

这样问题就解决了。

其他回答

在我的案例中,问题是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上找到一个简单的示例

我发现至少有三种方法:

在您尝试序列化的实体上添加公共getter; 如果不需要公共getter,则在实体的顶部添加注释。这将改变Jackson的默认值,从visibility = default到@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY),其中任何访问修饰符都是接受的; 通过设置objectMapperInstance.setVisibility(JsonMethod. setvisibility)全局更改您的ObjectMapper。字段,Visibility.ANY);。如果您不需要全局使用此功能,则应该避免这种情况。

根据您的需要进行选择。

Jackson使用getter和setter序列化。/反序列化。 所以在模型类中添加getter和setter。

SpringBoot2.0,我通过下面的代码来解决它:

@Bean public ObjectMapper objectMapper() {
 return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);}

添加一个

getter

和一个

这样问题就解决了。