当我试图使用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/setter为我解决了这个问题。 可以手动添加getter/setter,也可以使用Lombok注释@Getter/@Setter/@Data。

其他回答

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

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

对我来说,问题是来自导入org.springframework.data.rest.core.annotation.RestResource的注释@RestResource(exported = false)。我忘了拿掉了。

另外,当我忘记从导入javax.xml.bind.annotation.XmlRootElement中添加类注释@XmlRootElement时,我也得到了同样的错误。

以下是三种选择:

被访问的数据/类需要是公共的 如果不是public,则添加getter和setter 或者添加@JsonIgnore("context")

如果忘记在返回状态中添加.build()方法,也会抛出此错误。

return Response.status(Status.OK);         // fails
return Response.status(Status.OK).build(); // works

我得到了以下错误没有build()方法:

org.codehaus.jackson.map.JsonMappingException: No serializer found for class com.sun.jersey.core.spi.factory.ResponseBuilderImpl

对于Oracle Java应用程序,在ObjectMapper实例化之后添加这个:

mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);