当前位置: 首页 > 知识库问答 >
问题:

使用自定义getter反序列化我不拥有的类的JSON

从阎宝
2023-03-14

我正在尝试反序列化我不拥有的类的对象。该类具有属性名称,如id、address、name,但其getter是getId、getAddress等。

当我尝试使用Jackson反序列化JSON时,我得到

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "id_", not marked as ignorable

看起来发生这种情况是因为Jackson正在寻找的是getId,而不是getId。由于我不拥有底层类,因此无法使用Jackson的注释将属性映射到自定义json字段。

如何使用对象属性到其getter方法的自定义映射进行反序列化?

共有2个答案

乐山
2023-03-14

你可以为Jackson应用一个MixIn,这就是我解决问题的方法,我试图为自动生成的AVRO类序列化和反序列化JSON(AVRO生成的类问题,JSON转换[kotlin])

以下是一个示例:

https://medium.com/@shankar.ganesh./jackson-Mixin-a-Simple-Guide to-a-powerity-Function-d984341dc9e2

林承悦
2023-03-14

您可以尝试自定义反序列化程序。

签出:https://www.baeldung.com/jackson-deserialization

这样,就可以为类注册反序列化器。

但是,当类发生更改时,仍然必须对其进行编辑。

您还可以尝试另一件事:

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

这将使映射程序能够完全访问私有成员。

 类似资料:
  • 问题内容: 我有一堂课 我想将下面的JSON数据反序列化到上面的类/对象中 我的想法是在JSON中是一个对象,但我只想获取(在JSON中)在反序列化期间将像在类中那样传递。 如何使用Json.NET实现该目标? 我相信我可以使用CustomJsonConverter完成它。但是我很困惑。docs中的示例仅用于,但不适用。 问题答案: 我只是使用上面在问题中提到的方法解决了我的问题。在我完整的代码下

  • 问题内容: 我在使用Gson解析JSON响应时遇到问题。 JSON字串: 我有这两个课程: 但是当使用Gson解析这个时我有一个异常。我知道这是因为响应数组的第一个元素不是对象,而是整数。 所以问题是,我能以某种方式解决它吗? 问题答案: 您必须编写一个 自定义反序列化器 。我会做这样的事情: 首先,您需要包括一个新的类,而不是已有的两个类: 然后,您需要一个自定义解串器,类似于以下内容: 然后,

  • 问题内容: 我已经为类型编写了自定义(反)序列化器。我向对象映射器注册它们。但是当我部署war文件时,它说找不到joda.money.Money类型的序列化程序。 在ObjectMapper中注册; 问题答案: 我看到您在构造函数中创建但从未使用过。您可能应该在构造函数的最后使用JsonProvider。 但是我认为这不会解决您的问题。我认为问题在于jaxrs仅了解简单的数据类型,如果您要使用自定

  • 问题内容: 我正在使用Flickr API 。调用该方法时,默认的JSON结果为: 我想将此响应解析为Java对象: JSON属性应按以下方式映射: 不幸的是,我无法找到一种使用Annotations做到这一点的好方法。到目前为止,我的方法是将JSON字符串读入a 并从中获取值。 但是我认为,这是有史以来最不优雅的方式。有没有简单的方法,可以使用注释还是自定义反序列化器? 这对我来说将是很明显的,

  • 我需要编写一个方法,它接受一些对象、给定对象的类中存在的一些字段名和一些字段值。该值是字段的JSON序列化形式。该方法将获取该值并相应地反序列化它,如下所示: (我实际上只需要检索反序列化的值,而不需要重新设置它,但这使它成为一个更好的示例。)只要Jackson默认的反序列化足够,这就行了。现在让我们假设我有一个带有自定义(de)序列化程序的类: 一个可能的解决方案是手动检查注释。但是,我真的不想

  • 问题内容: 我的代码结构如下。 和 基本上我正在扫描网站以获取统计信息,例如标题标签,重复标题等。 我正在使用JQuery并向Web服务进行AJAX调用并检索url统计信息,而该过程正在运行以显示到目前为止收集的用户url统计信息,因为扫描大型网站需要花费大量时间。因此,每隔5秒,我就会从服务器检索统计信息。现在的问题是我需要在扫描处理完成时(而不是更新期间)最后发送所有List变量数据。现在发生