当前位置: 首页 > 面试题库 >

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

邓高韵
2023-03-14
问题内容

当尝试使用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()方便的方法。对于原始问题中的示例,我可能会将其配置为

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

对于Jackson> 2.0:

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

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



 类似资料:
  • 我对解析json有一个问题。它有一个日期为exapmle-"2014-01-07"。当它解析并成为createUserRequest.getBirthday()时,它包含-"2014-01-07T04:00:00.000 04:00"。我需要它在createUserRequest对象中,然后我会用另一个对象断言它。问题是如何得到“2014-01-07”? 在CreateUserRequest中,我

  • 问题内容: 我有一个使用序列化列的模型: 有没有办法使此序列化使用JSON而不是YAML? 问题答案: 在Rails 3.1中,您可以 希望能有所帮助

  • 我的问题类似于防止GSON序列化JSON字符串,但是那里的解决方案使用GSON库,而我仅限于使用Jackson(fasterxml)。 我有一个实体类,如下所示: 我想用映射的json字符串表示填充body字段,然后将其作为ResponseEntity的一部分发送。如下事物: 预期输出: 实际输出: 我在用 Jackson Core v2.8.2 标记,但这没有帮助,因为我的字段在写入实体时已经从

  • 我使用Json-Jackson序列化/反序列化我的对象,并且与内置类配合得很好。 字符串、int等非常好。但是现在我必须序列化/反序列化以特定方式构建的对象。遵循声明: 如果我使用标准的序列化器/反序列化,它会向我显示一条错误消息,例如“java.lang.不支持的操作异常...”,因此它无法序列化/反序列化bobjs。 我如何以一般方式做到这一点,所以我不写3个序列化器/反序列化器,而是只告诉J

  • 下面的代码再现了这个问题: 上面的代码不做其他注册“自定义”序列化程序的事情(只是委托回原始序列化程序),但它生成的JSON没有null属性: {“第一个”:“鲍勃”,“最后一个”:“巴克”} 我读过许多看似相关的SO文章,但没有一篇能让我找到解决方案。我尝试在序列化时显式地将映射器设置为,但没有成功。 我唯一的线索是JavaDoc for JsonSerializer中的一条注释: 注意:永远不

  • 来自REST服务的json对象 使用JacksonInFiveMinutes中的代码 ObjectMapper mapper=new ObjectMapper(); Map userData=mapper.read值(webResource.queryParams(queryParams). get(String.class);, Map.class); 在哪里: 从REST服务返回json 从J