当尝试使用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(); }
如前所述,ObjectMapper实例的默认配置是仅访问属于公共字段或具有公共获取器/设置器的属性。更改类定义以使字段成为公共字段或提供公共获取者/设置者的另一种方法是(向底层VisibilityChecker)指定不同的属性可见性规则。Jackson 1.9提供了ObjectMapper.setVisibility()方便的方法。对于原始问题中的示例,我可能会将其配置为
ObjectMapper
VisibilityChecker
ObjectMapper.setVisibility()
myObjectMapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);
对于Jackson> 2.0:
myObjectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
有关相关配置选项的更多信息和详细信息,建议查看上的JavaDocsObjectMapper.setVisibility()。