为了账号安全,请及时绑定邮箱和手机立即绑定

使用Jackson(JSON)进行序列化-是否获得“找不到序列化程序”?

使用Jackson(JSON)进行序列化-是否获得“找不到序列化程序”?

侃侃无极 2019-12-13 09:09:02
当尝试使用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();}
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

如前所述,ObjectMapper实例的默认配置是仅访问属于公共字段或具有公共获取器/设置器的属性。更改类定义以使字段公开或提供公共获取者/设置者的另一种方法是(向底层VisibilityChecker)指定不同的属性可见性规则。Jackson 1.9提供了ObjectMapper.setVisibility()方便的方法。对于原始问题中的示例,我可能会将其配置为


myObjectMapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);

对于Jackson> 2.0:


myObjectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

有关相关配置选项的更多信息和详细信息,建议查看上的JavaDocsObjectMapper.setVisibility()。


查看完整回答
反对 回复 2019-12-13
?
波斯汪

TA贡献1811条经验 获得超4个赞

为了让Jackson对该类进行序列化,SomeString字段必须为public(现在是程序包级别隔离),或者您需要为其定义getter和setter方法。


查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 530 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信