【问题标题】:Unable to map String to Object [duplicate]无法将字符串映射到对象 [重复]
【发布时间】:2019-09-11 00:33:07
【问题描述】:

我有一个字符串格式的 JSON 值,如下所示。

{
    "Sample": {
        "name": "some name",
        "key": "some key"
    },
    "Offering": {
        "offer": "some offer",
        "amount": 100
    }
}

现在,如果我尝试将其映射如下,它可以正常工作并且映射良好。

//mapper is ObjectMapper;
//data is the above json in String format
Map vo = mapper.readValue(data, Map.class);

但我想将其映射到自定义数据类,如下所示。

Data vo = mapper.readValue(data, Data.class);

当我这样做时,vo 的结果为空。

请参阅下文,了解 Data 类的结构。

@Getter
@Setter
public class Data {
    private Sample sample;
    private Offering offering;
}

@Getter
@Setter
public class Offering {
    public String offer;
    public int amount;
}

@Getter
@Setter
public class Sample {
    private String name;
    private String key;
}

请指教我做错了什么。谢谢。

【问题讨论】:

  • 杰克逊真的理解那些@Setter@Getter 注释吗?每当我这样做时,我只是创建了适当的方法。
  • 我真的怀疑 vo 是否为空。不过,它的样本及其产品可能是空的,因为 Jackson 会期望两个名为 sampleoffering 的属性,并且 JSON 包含 SampleOffering
  • 我在 json 中看到它的“样本”,但在课堂上看到它的“样本”
  • @markspace - 那是龙目岛。这是一种无需编写 getter 和 setter 即可生成 getter 和 setter 的方法。

标签: java jackson


【解决方案1】:

这里的 Word Case 似乎有问题。 它在您的 json 中的“示例”。 但它在java文件中的“样本”。 对于产品也是如此。

如果你想在不改变大小写的情况下进行映射,当然可以使用@JsonProperty。

【讨论】:

    【解决方案2】:

    有两种选择:

    1. 如果您可以更改您的 json - 您必须将 Sample 更改为 sampleOffering 更改为 offering

    2. 将您的 Data 类更改为:

    @Getter
    @Setter
    public class Data {
        @JsonProperty("Sample")
        private Sample sample;
    
        @JsonProperty("Offering")
        private Offering offering;
    }
    

    在第二个选项中,您必须告诉 Jackson 您输入的 json 的哪些属性要映射到您的类的哪些属性,因为默认情况下它会尝试映射到小写的属性名称。

    【讨论】:

      【解决方案3】:

      可能是json字符串和Demo模型中的字段映射名不同。 json 字符串中的“Sample”,模型类中的“sample”。

      您可以使用@JsonProperty

      @JsonProperty("Sample")
      private Sample sample;
      @JsonProperty("Offering")
      private Offering offering;
      

      【讨论】:

        猜你喜欢
        • 2019-07-18
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        • 2018-05-29
        • 2019-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多