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

用杰克逊收集未知的财产

楚俊逸
2023-03-14
问题内容

我正在使用Jackson从JSON创建Java对象。假设我有一个像这样的JSON字符串:

{"a":"a", "b":"b", "c":"c"}

和这样的pojo:

@JsonIgnoreProperties(ignoreUnknown = true)
public class A {

    private String a;
    private String b;

    // ...
}

因此,c显然是未知的属性-它将被排除在外。我想知道,有什么办法可以记录c未知和被忽略的情况?


问题答案:

我不知道有任何内置工具可以做到这一点。您可以用@JsonAnySetter

标记注释,可用于定义一个非静态的,两个参数的方法(属性的第一个参数名称,第二个要设置的值),用作从JSON内容中找到的所有其他无法识别的属性的“后备”处理程序。

像这样使用

@JsonAnySetter
public void ignored(String name, Object value) {
    // can ignore the 'value' if you only care for the name (though you still need the second parameter)
    System.out.println(name + " : " + value);
}

在您要反序列化的类中,例如 你的A课。



 类似资料:
  • 我在对象映射器上使用Jackson的readValue()方法从JSON文件中读取并将其转换为我的java对象。 如。 我可以在MyTargetClass上设置任何注释来强制执行所需的属性吗?例如,如果我有一个属性为ABC、DEF和GHI的JSON对象,我的JSON如下 我希望它以某种方式失败,并且只有在readValue上成功,如果它包含ABC、DEF和GHI。

  • 问题内容: 我在对象映射器上使用Jackson的readValue()方法从JSON文件读取并将其转换为我的Java对象。 例如。 我可以在MyTargetClass上设置任何注释以强制执行必需的属性吗?例如,如果我有一个具有ABC,DEF和GHI属性的JSON对象,而我的Json是以下内容 我希望它以某种方式失败,并且仅在readValue包含ABC,DEF和GHI时才能成功。 问题答案: Ja

  • 我还在学习如何使用Jackson。。。 所以我有一个JSON对象,它的值有时是整数、长字符串或列表 值:整数 值:字符串 价值:列表 所以总的来说。。。 这是我的POJO模型 这是我的映射器代码 问题是,当我执行代码时,出现以下错误: 我很清楚,之所以会发生这种情况,是因为“value”可以包含三种不同类型中的一种,我如何使代码足够灵活以适应这些类型。。。我总是可以在其他方法中检测值是int、Li

  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • 我已经发布了类似的东西,但我仍然试图集中在我的问题上。 谢谢你能容忍我。 com.fasterxml.jackson.databind.jsonMappingException:无法构造FHIR.Element的实例,问题:抽象类型要么需要映射到具体类型,有自定义的反序列化器,要么需要在com.fasterxml.jackson.databind.jsonMappingException.from

  • 问题内容: 我有一个像这样的JSON字符串: 现在,我将使用 Jackson 2.0进行 解析。我正在尝试从JSON字符串获取a 。 可能吗? 问题答案: 您的媒体资源看起来不像数组。它代表具有动态属性的对象,因此我们应将其视为对象。如果我们对属性一无所知,可以使用注释。算法可能如下所示: 将JSON反序列化为JSON模型类。 使用ObjectMapper将动态对象(地图)转换为应用的POJO类