无法将字符串映射到对象

时间:2019-04-21 14:57:52

标签: java jackson

我有一个String格式的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类。

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;
}

请告知我在做什么错。谢谢。

3 个答案:

答案 0 :(得分:4)

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

如果您想在不更改大小写的情况下进行映射,则可以使用@JsonProperty。

答案 1 :(得分:4)

有两种选择:

  1. 如果您可以更改json-您必须将Sample更改为sample,将Offering更改为offering

  2. 将您的Data类更改为:

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

    @JsonProperty("Offering")
    private Offering offering;
}

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

答案 2 :(得分:4)

可能是由于json字符串和Demo模型中字段的映射名称不同。 json字符串中为“样本”,而模型类中为“样本”。

您可以使用@JsonProperty

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